POJ 1001 Exponentiation
测试数据没有问题,但是不知道为什么老得到Wrong Answer
1 #include <stdio.h> 2 #include <string.h> 3 #define MAXLEN 1000 4 struct decimal 5 { 6 int num[MAXLEN]; 7 int len; 8 int frac; 9 }; 10 11 void Product(decimal d1, decimal d2,decimal& d3) 12 { 13 int i,j; //i points to d1,j points to d2 14 memset(d3.num,0,sizeof(d3.num)); 15 for(j=0;j<d2.len;j++) 16 for(i=0;i<d1.len;i++) 17 d3.num[i+j]+=d1.num[i]*d2.num[j]; 18 for(i=0;i<d1.len+d2.len-1;i++) 19 { 20 d3.num[i+1]+=d3.num[i]/10; 21 d3.num[i]=d3.num[i]%10; 22 } 23 //here i=d1.len+d2.len-1, the highest bit of d3 24 int sig=d1.len+d2.len-1; 25 if(d3.num[sig]!=0) 26 d3.len=sig+1; 27 else 28 d3.len=sig; 29 //frac 30 d3.frac=d1.frac+d2.frac; 31 } 32 void Reverse(char str[],int len) 33 { 34 char x[MAXLEN]; 35 int i; 36 for(i=0;i<len;i++) 37 x[i]=str[len-1-i]; 38 for(i=0;i<len;i++) 39 str[i]=x[i]; 40 } 41 void Output(decimal& d3) 42 { 43 char str[MAXLEN]={0}; 44 int i,j; 45 for(i=0;i<d3.len && d3.num[i]==0;i++); //eliminate tail zero 46 if(i==d3.len) 47 { 48 printf("0\n"); 49 return; 50 } 51 for(j=0;i<d3.len;i++,j++) 52 { 53 str[j]=d3.num[i]+'0'; 54 if(i==d3.frac-1) 55 { 56 j++; 57 str[j]='.'; 58 } 59 } 60 //highest bit of str is j-1, len is j; 61 int len=j; 62 //eliminate front zero 63 for(i=len-1;i>=0 && str[i]=='0';i--,len--); 64 65 Reverse(str,len); 66 67 str[len]='\0'; 68 printf("%s\n",str); 69 } 70 //string is ended by '\0' 71 int CountFrac(char str[]) 72 { 73 int count=0; 74 int i; 75 int len=strlen(str); 76 for(i=0;i<len;i++) 77 if(str[i]=='.') 78 return (len-i-1); 79 return 0; 80 } 81 void str2dec(char str[], decimal& d) 82 { 83 int i,j; 84 int len=strlen(str); 85 d.frac=CountFrac(str); 86 d.len=0; 87 for(i=len-1,j=0;i>=0;i--) 88 if(str[i]!='.') 89 { 90 d.num[j]=str[i]-'0'; 91 d.len++; 92 j++; 93 } 94 } 95 int main() 96 { 97 decimal d1,d2,d3; 98 char base[10]; 99 int n; 100 while(scanf("%s%d",base,&n)!=EOF) 101 { 102 d1.len=strlen(base); 103 memset(d1.num,0,sizeof(d1.num)); 104 memset(d3.num,0,sizeof(d3.num)); 105 str2dec(base,d1); 106 d3.frac=0; 107 d3.len=1; 108 d3.num[0]=1; 109 for(int i=1;i<=n;i++) 110 Product(d3,d1,d3); 111 Output(d3); 112 } 113 }

浙公网安备 33010602011771号