我说的是12楼,不是11楼。11楼的结果应该是错的。
重剑无锋,大巧不工
#include<stdio.h> void fun(int n); int a[1000000]={0}; int s[1000000]={0}; int LengTh=0; int length=0;//size of array s[] int L=0; int main() { int i,n; // while(scanf("%d",&n)!=EOF) for(n=1;n<=20;n++) { fun(n); // if(length<L) // { length=L; // } //for(i=LengTh;i>=0;i--) for(i=0;i<=LengTh;i++) { /* s[i]+=a[i]; if(s[i]+a[i]>9) { s[i+1]+=1; s[i]-=10; if(i+1>LengTh) { length=LengTh+1; } // if }*/ // printf("%d",a[i]); if(s[i]+a[i]>9) { s[i]=s[i]+a[i]-10; s[i+1]+=1; if(i==LengTh) { length++; } } else { s[i]=s[i]+a[i]; } } for(i=LengTh;i>=0;i--) printf("%d",a[i]); printf("\n"); printf("\n"); } for(i=length;i>=0;i--) printf("%d",s[i]); printf("\n"); return 0; } void fun(int n) { int i,c,m; LengTh=0; if(n==1) { a[0]=1; LengTh=0; return; } if(n>=2) { fun(n-1); c=0; for(i=0;i<=LengTh;i++) { m=a[i]*n; a[i]=(m+c)%10; c=(m+c)/10; } while(c) { a[i]=c%10; i++; LengTh++; if(LengTh>L) { L=LengTh; } c=c/10; } } }