1 #include <stdio.h>
2
3 #define mo 10000
4 int ans[1000001];
5 //这里高精度整数存储格式是:ans[0]存储位数,低位在前,高位在后,每一个ans[i]存储四位整数
6
7 void mul(int *,int);
8 void print_arr(int *);
9 void fact(int n);
10
11 int main()
12 {
13 int n,i;
14 scanf("%d",&n);
15 printf("%d!=",n);
16 fact(n);
17 print_arr(ans);/**/
18
19 /*ans[0]=1;
20 ans[1]=1000;
21 n=15;
22 mul(ans,n);
23 print_arr(ans);
24 for(i=0;i<=ans[0];i++) printf("%d ",ans[i]);*/
25
26 return 0;
27 }
28 void mul(int * a,int c)
29 {
30 int i,x=0;
31 for (i=1;i<=a[0];i++)
32 {
33 a[i]=a[i]*c+x;
34 x=a[i]/mo; //进位
35 a[i]=a[i]%mo;
36 }
37 while(x>0) //向更高位进位
38 {
39 a[++a[0]]=x%mo;
40 x=x/mo;
41 }
42 }
43
44 void print_arr(int * a)
45 {
46 int i;
47
48 //单独输出高位。避免在循环体内用%04d的格式输出从而产生无意义的前缀0。
49 printf("%d",a[a[0]]);
50
51 for (i=a[0]-1;i>0;i--)
52 printf("%04d",a[i]);
53 putchar('\n');
54 }
55
56 void fact(int n)
57 {
58 if (n==1)
59 {
60 ans[0]=1;
61 ans[1]=1;
62 return ;
63 }
64 fact(n-1); //先求(n-1)的阶乘
65 mul(ans,n); //然后求n的阶乘
66 }