首页 > 代码库 > AC日记——阶乘之和 洛谷 P1009(高精度)

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[302],sum[302];void long_multiply(int number){    for(int i=0;i<=300;i++) num[i]*=number;    for(int i=0;i<=300;i++)    {        if(num[i]>9)        {            num[i+1]+=num[i]/10;            num[i]%=10;        }    }}void long_add(){    for(int i=0;i<=300;i++)    {        sum[i]+=num[i];        if(sum[i]>9)        {            sum[i+1]+=sum[i]/10;            sum[i]%=10;        }    }}void long_print(){    bool ok=false;    for(int i=301;i>=0;i--)    {        if(sum[i]!=0&&!ok) ok=true;        if(ok) putchar(sum[i]+48);    }    putchar(\n);}int main(){    num[0]=1;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        long_multiply(i);        long_add();    }    long_print();    return 0;}

 

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