1025: 【C语言训练】求1+2!+3!+...+N!的和
时间限制: 1 Sec 内存限制: 128 MB提交: 21 解决: 0
题目描述
求1+2!+3!+...+N!的和
输入
正整数N(N〈=20)
输出
1+2!+3!+...+N!的和 (结果为整数形式)
样例输入
3
样例输出
9
#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; int a[21][100],b[100]; void dabiao(){int i=1,e,g,f;memset(a,0,sizeof(a));for(i=1;i<=20;++i){a[i][0]=1;for(int j=2;j<=i;++j){int c=0;for(int h=0;h<100;++h){int s=a[i][h]*j+c;a[i][h]=s%10;c=s/10;}}} } void jiafa(int n){int q=0,e=0;for(int i=0;i<100;++i){if(i!=0)q=(a[n][i-1]+e+q)/10;e=b[i];b[i]=(a[n][i]+b[i]+q)%10;} } int main() {dabiao();int n,i,j;while(scanf("%d",&n)==1){if(n==0){printf("1\n");continue;}memset(b,0,sizeof(b));for(i=1;i<=n;++i)jiafa(i);for( j=100;j>=0;--j)if(b[j]!=0)break;for(i=j;i>=0;--i)printf("%d",b[i]);printf("\n");}return 0; }