#include<stdio.h>//加法字符串会进位了 但乘法第一次听说 明白了 #define width 3000 int main() { int i,j; int k,r,t; int N; int d[width]; while(scanf("%d",&N)!=EOF) { t=0; for(i=0;i<width;i++) /**给数组初始化为零*/ d[i]=0; d[0]=1; /**个位初始化为1*/ for(i=1;i<=N;i++) /**从1到N进行阶乘*/ { k=0; for(j=0;j<=t;j++)/**从个位开始往高位运算*/ { r=(d[j]*i+k)/10; /**第j位乘以i加上后一位运算得到的k,在除以10得到k*/ d[j]=(d[j]*i+k)%10;/**第j位乘以i加上后一位运算得到的k,再取余得到运算后第j位的只*/ k=r; } while(k!=0) /**k!=0说明要向高位进位*/ { d[++t]=k%10; k=k/10; } } for(i=t;i>=0;i--) /**从个位开始输出各位数字*/ printf("%d",d[i]); printf("\n"); } return 0; }