HDU 1063 Exponentiation(高精度)

题目链接

此题和UVA上一模一样,可是数据不一样,都很变态,UVA上是一定有小数点,而杭电上不一定,UVA上在结果为0时,输出“.”而杭电上输出0。注意这个就能AC。

UVA上AC代码这里

  1 #include<stdio.h>

  2 #include<string.h>

  3 int k1[201],k2[201],o1[10];

  4 int main()

  5 {

  6     int  a,b,c,i,j,num,e,d;

  7     char p[10];

  8     while(scanf("%s%d",p,&num)!=EOF)

  9     {

 10         memset(k1,0,sizeof(k1));

 11         memset(k2,0,sizeof(k2));

 12         memset(o1,0,sizeof(o1));

 13         b=strlen(p);

 14         e = 0;//开始这个变量没初始化

 15         for(a=b-1,i=0; a>=0; a--,i++)

 16         {

 17             if(p[a] !='.')

 18             {

 19                 o1[i]=p[a]-'0';

 20                 k1[i]=p[a]-'0';

 21             }

 22             else

 23             {

 24                 e=i;

 25                 i--;

 26             }

 27         }

 28         for(i=2; i<=num; i++)

 29         {

 30             if(i%2==0)

 31             {

 32                 memset(k2,0,sizeof(k2));

 33                 for(a=0; a<=200; a++)

 34                 {

 35                     for(b=0; b<=8; b++)

 36                     {

 37                         k2[a+b]+=k1[a]*o1[b];

 38                     }

 39                 }

 40                 for(a=0; a<=200; a++)

 41                 {

 42                     if(k2[a]>=10)

 43                     {

 44                         k2[a+1]+=k2[a]/10;

 45                         k2[a]=k2[a]%10;

 46                     }

 47                 }

 48             }

 49             else

 50             {

 51                 memset(k1,0,sizeof(k1));

 52                 for(a=0; a<=200; a++)

 53                 {

 54                     for(b=0; b<=8; b++)

 55                     {

 56                         k1[a+b]+=k2[a]*o1[b];

 57                     }

 58                 }

 59                 for(a=0; a<=200; a++)

 60                 {

 61                     if(k1[a]>=10)

 62                     {

 63                         k1[a+1]+=k1[a]/10;

 64                         k1[a]=k1[a]%10;

 65                     }

 66                 }

 67             }

 68         }

 69         if(num%2==0)

 70         {

 71             c=0;

 72             for(j=0; j<=e*num-1; j++)

 73             {

 74                 if(k2[j]!=0)

 75                 {

 76                     break;

 77                 }

 78             }

 79             for(b=200; b>=j; b--)

 80             {

 81                 if(k2[b]!=0)

 82                     c=1;

 83                 if(b==e*num-1)printf(".");

 84                 if(c||b<=e*num-1)printf("%d",k2[b]);

 85             }

 86         }

 87         else

 88         {

 89             c=0;

 90             for(j=0; j<=e*num-1; j++)

 91             {

 92                 if(k1[j]!=0)

 93                 {

 94                     break;

 95                 }

 96             }

 97             for(b=200; b>=j; b--)

 98             {

 99                 if(k1[b]!=0)

100                     c=1;

101                 if(b==e*num-1)printf(".");

102                 if(c||b<=e*num-1)printf("%d",k1[b]);

103             }

104         }

105         if(c==0)printf("0");//这里输出的是"."

106         printf("\n");

107     }

108     return 0;

109 }

你可能感兴趣的:(exp)