题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入输出格式
输入格式:
一个正整数N。
输出格式:
一个正整数S,表示计算结果。
输入输出样例
输入样例#1:
3
输出样例#1:
9 思路:
本来以为是道水题
结果,写了个用unsigned long long的简单的循环只有50分
又看了一下范围和题目才开始写的高精度 来,上代码:
#include<cstdio>
#include<algorithm> using namespace std; int n,num[],sum[]; void long_multiply(int number)
{
for(int i=;i<=;i++) num[i]*=number;
for(int i=;i<=;i++)
{
if(num[i]>)
{
num[i+]+=num[i]/;
num[i]%=;
}
}
} void long_add()
{
for(int i=;i<=;i++)
{
sum[i]+=num[i];
if(sum[i]>)
{
sum[i+]+=sum[i]/;
sum[i]%=;
}
}
} void long_print()
{
bool ok=false;
for(int i=;i>=;i--)
{
if(sum[i]!=&&!ok) ok=true;
if(ok) putchar(sum[i]+);
}
putchar('\n');
} int main()
{
num[]=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
long_multiply(i);
long_add();
}
long_print();
return ;
}