思路:
即用数组a,数组中的每个元素存储4位数,,
比如,计算9的阶乘,在计算到7的阶乘时,7!为5040,可以用a[0]存储5040,没有产生进位,然后8!=5040*8=40320,如果看成万进制则产生了进位,那么a[0]=320(注意输出时不足4位的要在前边补0),a[1]=4(最高位不用补0),9!=40320*9,那么a[0]*9=320*9=2880,a[1]*9=4*9=36,那么9!=a[1]+a[0]=362880(注意这里的+相当于字符串连接,)
以下AC代码:
#include<stdio.h>
int a[10005];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int index,temp,i,j;
a[0]=1;
index=0; ///阶乘结果总长度
for(i=1;i<=n;i++)
{
temp=0; ///进位
for(j=0;j<=index;j++)
{ ///
a[j]=a[j]*i+temp;
temp=a[j]/10000;
a[j]%=10000;
}
if(temp>0)
{ ///如果产生进位,直接跳到下一个a[i],
a[++index]=temp;
}
}
printf("%d",a[index]);
for(i=index-1;i>=0;i--)
{ ///不满4位的前边补0
if(a[i]>=1000)
printf("%d",a[i]);
else if(a[i]>=100)
printf("0%d",a[i]);
else if(a[i]>=10)
printf("00%d",a[i]);
else
printf("000%d",a[i]);
}
printf("\n");
}
return 0;
}