#include <stdio.h>
#define N 3000 //定义数组长度
int main()
{
int a[N],i,j,k,n;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<N;i++) //初始化数组
a[i]=0;
a[0]=1; //第一位设为1
k=0; //记录进位坐标
for(i=1;i<=n;i++) //计算阶乘
{
for(j=0;j<=k;j++)
a[j]=a[j]*i; //每一位与i相乘
for(j=0;j<=k;j++)
{
if(a[j]>9) //判断是否需要进位 ****精髓****
{
a[j+1]+=a[j]/10; //高一位加上进位值
a[j]=a[j]%10; //当前位保留个位数
if(j==k) k++; //更新进位坐标
}
}
}
for(i=k;i>=0;i--) //倒序输出结果
printf("%d",a[i]);
printf("\n");
}
}
看看注释,应该能看懂
欢迎在评论区讨论!!