https://www.luogu.org/problem/show?pid=1009
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=54321。
输入输出格式
输入格式:
一个正整数N。
输出格式:
一个正整数S,表示计算结果。
输入输出样例
输入样例#1:
3
输出样例#1:
9
#include <algorithm>
#include <iostream> using namespace std; int n;
int sum[],mul[]; void multiply(int k)
{
int x=;
for(int i=;i<=mul[];i++)
{
mul[i]=mul[i]*k+x;
if(mul[i]>)
{
x=mul[i]/;
mul[i]%=;
mul[]=max(mul[],i+);
}
else x=;
} } void add()
{
int x=,k=max(mul[],sum[]);
for(int i=;i<=k;i++)
{
sum[i]=sum[i]+mul[i];
sum[i+]+=sum[i]/;
sum[i]%=;
//sum[0]++;
}
} int main()
{
cin>>n;
mul[]=;sum[]=;mul[]=;sum[]=;
for(int i=;i<=n;i++)
{
multiply(i);
add();
}
for(int i=max(sum[],mul[]);i>=;i--)
cout<<sum[i];
return ;
}