AC日记——阶乘之和 洛谷 P1009(高精度)

时间:2023-03-09 10:00:01
AC日记——阶乘之和 洛谷 P1009(高精度)

题目描述

用高精度计算出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 ;
}