题目描述
已知正整数n(n<=200),请编程计算 1!+2!+...+n! 的值。
注:n!=1 * 2 *... * (n-1) * n。
输入
一个正整数n(n<=200)。
输出
一行,表示阶乘和。
解题思路:太难了要算的是高精度!!!
输入样例 复制
4输出样例 复制
3370分错误代码
#include<bits/stdc++.h> using namespace std; int s[67],f[66]; int main() { int n,lenf=1,lens=0; scanf("%d",&n); memset(s,0,sizeof(s)); memset(f,0,sizeof(f)); f[1]=1; for(int i=1;i<=n;i++) { int jin=0; for(int j=1;j<=lenf;j++) { f[j]=i*f[j]+jin; jin=f[j] / 10; f[j]=f[j] % 10; } while(jin != 0) { lenf++; f[lenf]=jin%10; jin=jin/10; } int jin1=0,len=lenf>lens?lenf:lens; for(int m=1;m<=len;m++) { s[m]=s[m]+f[m]+jin1; jin1=s[m] / 10; s[m]=s[m] % 10; } if(jin1 != 0) { len++; s[len]=1; } lens=len; } for(int i=lens;i>=1;i--) { printf("%d",s[i]); } return 0; }
#include<bits/stdc++.h> using namespace std; int a[39900]; int x; int j,n; void cxk(int f) { for(int i=0;i<=x;i++) { if(a[i]>=100000) { a[i+1]+=a[i]/100000; a[i]=a[i]%100000; if(i==x) x++; } a[i]*=f; } a[0]+=f; } int main() { scanf("%d",&a[0]); for(int y=a[0]-1;y>=1;y--) { cxk(y); } for(int i=0;i<=x;i++) { if(a[i]>=100000) { a[i+1]+=a[i]/100000; a[i]=a[i]%100000; if(i==x) x++; } } for(int i=x+1;i>=0;i--) { if(a[i]) { printf("%d",a[i]); for(i--;i>=0;i--) { printf("%.5d",a[i]); } } } }
满分代码