NYOJ 28.大數階乘
/* 大數階乘 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後輸入一個換行符 樣例輸入 50樣例輸出 30414093201713378043612608166064768844377641568960512000000000000 */
#include<stdio.h> #include<string.h> #define N 40000 int s[N]; int main() { int i,j,k,t,n; while(scanf("%d",&n)!=EOF) { memset(s,0,sizeof(s));//每次使用前都要清零 s[0]=1; //相當於s陣列存貯的大數000001 for(i=2;i<=n;i++)//計算n! { for(t=0,j=0;j<N;j++) //t為進位數,s[j]存貯當前位的數, { k=s[j]*i+t;//得到i!當下次i++時,就得到i++的階乘。(3!=2!*3) s[j]=k%10;//對10取餘得到當前最低位 t=k/10;//看是否進位,若進位的話就加上 } } for(i=N-1;!s[i];i--);//除去前導0 printf("%d",s[i]);// 第一個元素不要求輸出多餘的0 while(i) printf("%d",s[--i]);//這些要輸出前面多餘的0 printf("\n"); } return 0; }