当前位置: 代码迷 >> 综合 >> 1025: 【C语言训练】求1+2!+3!+...+N!的和
  详细解决方案

1025: 【C语言训练】求1+2!+3!+...+N!的和

热度:45   发布时间:2023-12-17 09:08:57.0

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;
}