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 }