1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define N 40000
5 int s[N];
6 int main()
7 {
8 int i,j,k,t,n;
9 while(scanf("%d",&n)!=EOF)
10 {
11 memset(s,0,sizeof(s));//每次使用前都要清零
12 s[0]=1; //相当于s数组存贮的大数000001
13 for(i=2;i<=n;i++)//计算n!
14 {
15 for(t=0,j=0;j<N;j++) //t为进位数,s[j]存贮当前位的数,
16 {
17 k=s[j]*i+t;//得到i!当下次i++时,就得到i++的阶乘。(3!=2!*3)
18 s[j]=k%10;//对10取余得到当前最低位
19 t=k/10;//看是否进位,若进位的话就加上
20 }
21 }
22 for(i=N-1;!s[i];i--);//除去前导0
23 printf("%d",s[i]);// 第一个元素不要求输出多余的0
24 while(i)
25 printf("%d",s[--i]);//这些要输出前面多余的0
26 putchar('\n');
27 }
28 //system("pause");
29 return 0;
30 }
31