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 }