用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5 \times 4 \times 3 \times 2 \times 15!=5×4×3×2×1。
输入输出格式
输入格式:
一个正整数NN。
输出格式:
一个正整数SS,表示计算结果。
输入输出样例
输入样例#1: 复制
3
输出样例#1: 复制
9
PS:一个模板题。
AC代码:
#include <iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<stack>
#include<string>
const int maxn=1e3+10;
const int mod=1e9+7;
const int inf=1e8;
#define me(a,b) memset(a,b,sizeof(a))
typedef long long ll;
using namespace std;
int c[maxn];
void add(int *a,int *b)
{
int x=0,i;
for(i=0;i<maxn;i++)
{
c[i]=a[i]+b[i]+x;
x=c[i]/10;
c[i]%=10;
}
}
int main()
{
int n;cin>>n;
int a[maxn];me(a,0),me(c,0);
for(int t=1;t<=n;t++)
{
me(a,0);a[0]=1;
for(int i=2;i<=t;i++)
{
int x=0;
for(int j=0;j<200;j++)
{
a[j]=a[j]*i+x;
x=a[j]/10;
a[j]%=10;
}
}
add(c,a);
}
int l=maxn;
while(!c[l])
l--;
for(;l>=0;l--)
cout<<c[l];
cout<<endl;
return 0;
}