杭电1042

1 #include<stdio.h> 2 #include<memory.h> 3 int a[10000]; 4 int Mulity(int n) 5 { 6 int carry,i,j,w,g,t; 7 memset(a,0,sizeof(a)); 8 a[0]=1; 9 w=1; //刚开始时只有1位 10 for(i=1;i<=n;i++) 11 { 12 carry=0; 13 t=w; 14 //用数字与原有的结果的各位的数字一一相乘,从而分解数字(利于存储)!!! 15 for(j=0;j<w;j++) 16 { 17 g=a[j]; 18 a[j]=(g*i+carry)%10000; //得到数字的每四位数字,将十进制数改为“万进制数” 19 carry=(g*i+carry)/10000; //carry表示进位,类似于大整数的加法!!! 20 if(carry && j==w-1) 21 { 22 t++; 23 a[j+1]=carry; 24 carry=0; 25 } 26 } 27 w=t; 28 } 29 return w; 30 } 31 int main() 32 { 33 int n,i,j; 34 while(scanf("%d",&n)!=EOF) 35 { 36 37 j=Mulity(n); 38 printf("%d",a[j-1]); 39 for(i=j-2;i>=0;i--) 40 printf("%04d",a[i]); // 对于不满四位的数字,在前面对其补0!!! 41 printf("\n"); 42 } 43 return 0; 44 }