- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入正整数N,输出计算结果S。
- 输入
- 一个正整数N。
- 输出
- 计算结果S。
- 样例输入
-
5
- 样例输出
-
153
- 来源
- NOIP1998复赛 普及组 第二题
代碼實現:
1 #include<cstdio> 2 int n,a,ans[60000],fz[50000],jc[50000]={1,1}; 3 int main(){ 4 scanf("%d",&n); 5 for(int i=1;i<=n;i++){ 6 for(int j=1;j<=jc[0];j++){ 7 jc[j]=jc[j]*i+fz[j];fz[j]=0; 8 if(jc[j]>9){ 9 fz[j+1]+=jc[j]/10; 10 jc[j]%=10; 11 if(j==jc[0]) ++jc[0]; 12 } 13 } 14 if(jc[0]>ans[0]) ans[0]=jc[0]; 15 for(int i=1;i<=ans[0];i++){ 16 ans[i]+=jc[i]; 17 if(ans[i]>9){ 18 ans[i+1]+=ans[i]/10; 19 ans[i]%=10; 20 if(i==ans[0]) ++ans[0]; 21 } 22 } 23 } 24 for(int i=ans[0];i>0;i--) printf("%d",ans[i]); 25 printf(" "); 26 return 0; 27 }
。。。