我说的是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;
}
}
}