jzxx1570 1!+2!+3!+……+N!
阿新 • • 發佈:2018-12-23
題目描述
用高精度計算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示階乘,例如:5!=54321。
輸入
一行,一個正整數N。
輸出
一行,一個正整數,即結果S。
樣例輸入
5
樣例輸出
153
滿分程式碼: #include<stdio.h> #include<string.h> int a[55][50]; void f() { a[1][0]=1; int i,j,k; for(i=2; i<=50; i++) { for(j=0; j<=40; j++) a[i][j]=a[i-1][j]*i; for(j=0; j<=20; j++) { a[i][j+1]+=a[i][j]/1000; a[i][j]%=1000; } } for(i=2; i<50; i++) { for(j=0; j<=40; j++) a[i][j]+=a[i-1][j]; for(j=0; j<=30; j++) { a[i][j+1]+=a[i][j]/1000; a[i][j]%=1000; } } } int main() { int n,i,j; memset(a,0,sizeof(a)); f(); while(scanf("%d",&n)!=EOF) { for(i=30; i>=0; i--) if(a[n][i]!=0) break; for(j=i; j>=0; j--) if(j==i) printf("%d",a[n][i]); else printf("%03d",a[n][j]); return 0; } }