求n!。当n很大的时候,会超出整数的范围。
这里用数组来进行高精阶乘。a[1]是个位,a[2]是十位......依次类推。每次要乘一个数的时候,就从个位(即a[1])开始乘这个数,>10的时候要%10再进位。
1 #include<cstdio> 2 #include<cstring> 3 const int N=100000; 4 5 int a[N]; 6 int i, j, n; 7 int t, pos/*位数*/, carry/*进位*/; 8 9 int main() 10 { 11 while(scanf("%d", &n)==1) 12 { 13 memset(a, 0, sizeof(a)); 14 a[1]=1; 15 pos=1; 16 carry=0; 17 18 for(i=2; i<=n; i++) 19 { 20 for(j=1; j<=pos; j++) 21 { 22 t=a[j]*i+carry; 23 a[j]=t%10; 24 carry=t/10; 25 } 26 while(carry) 27 { 28 t=carry; 29 pos++; 30 a[pos]=t%10; 31 carry=t/10; 32 } 33 } 34 35 for(i=pos; i>=1; i--) 36 printf("%d", a[i]); 37 puts(""); 38 } 39 return 0; 40 }