开始wa了几次后来重写一次就A了不知坑在哪
#include<stdio.h> #include<string.h> #define N 1000 int a[N],b[N],sum[N]; int lena,lenb,len,flag,c; char s[N]; void init() { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int i,j,k; flag=0; b[0]=1;lenb=1; len=strlen(s); for(i=len-1,j=0;i>=0;i--) if(s[i]=='.') {flag=1;k=i;} else a[j++]=s[i]-'0'; if(flag) {c=len-k-1;lena=len-1;len=c;} else {c=0;lena=len;len=0;} } void mult() { int i,j; memset(sum,0,sizeof(sum)); for(i=0;i<lena;i++) for(j=0;j<lenb;j++) sum[i+j]+=a[i]*b[j]; for(i=0;i<lena+lenb+5;i++) if(sum[i]>=10) {sum[i+1]+=sum[i]/10;sum[i]%=10;} for(i=lena+lenb+5;i>len;i--) if(sum[i]!=0) {lenb=i+1;break;} if(i==len) {lenb=i+1;} for(i=0;i<lenb;i++) b[i]=sum[i]; len+=c; } int main() { int n,i,j; while(scanf("%s %d",s,&n)!=EOF) { init(); for(i=0;i<n;i++) mult(); len-=c; if(b[lenb-1]==0) lenb--; for(i=0;i<lenb;i++) if(b[i]!=0) {j=i;break;} if(flag){ for(i=lenb-1;i>=j;i--) if(i==len-1) printf(".%d",b[i]); else printf("%d",b[i]); printf(" "); } else { for(i=lenb-1;i>=0;i--) printf("%d",b[i]); printf(" "); } } return 0; }