**描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=54321。
输入正整数N,输出计算结果S。
输入
一个正整数N。
输出
计算结果S。
样例输入
5
样例输出
153**
#include <iostream>
#include <cstdio>
using namespace std;
int a[100000]={1},s[100000];
int n,len=1,jinwei=0,jinwei1=0,t,len1=0,size;
int main()
{
cin>>n;
for(int j=1;j<=n;j++)
{
//求阶乘
for(int i=0;i<len;i++)
{
t = a[i]*j + jinwei;
a[i] = t%10;
jinwei = t/10;
}
while(jinwei)
{
a[len] = jinwei%10;
jinwei /= 10;
len++;
}
//求和
size = len>len1 ? len:len1;
for(int k=0;k<size;k++)
{
if(k>=len)
{
t = s[k]+jinwei;
}else if(k>=len1)
{
t = a[k]+jinwei;
}else{
t = a[k]+s[k]+jinwei;
}
s[k] = t%10;
jinwei = t/10;
}
if(jinwei!=0)
{
s[size] = jinwei;
size++;
jinwei = 0;
}
len1=size;
}
for(int i=len1-1;i>=0;i--)
{
cout<<s[i];
}
return 0;
}