P1009 阶乘之和

Posted 神犇(shenben)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1009 阶乘之和相关的知识,希望对你有一定的参考价值。

P1009 阶乘之和

  • 题目提供者洛谷OnlineJudge
  • 标签数论(数学相关)高精1998NOIp提高组NOIp普及组
  • 难度普及-
  • 通过/提交1139/3791

提交该题 讨论 题解 记录

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入输出格式

输入格式:

 

一个正整数N。

 

输出格式:

 

一个正整数S,表示计算结果。

 

输入输出样例

输入样例#1:
3
输出样例#1:
9
#include<iostream>
#include<cstring>
using namespace std;
int a[100000],n,i,j,x[100000],y[100000];
void add()//处理进位
{
    memset(x,0,sizeof(x));
    x[0]=max(y[0],a[0]);
    for(i=1;i<=x[0];i++){x[i]+=y[i]+a[i],x[i+1]=x[i]/10,x[i]%=10;}
    while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}
    y[0]=x[0];
    for(i=1;i<=x[0];i++){y[i]=x[i];}
}
int main()
{
    cin>>n;
    a[0]=1,a[1]=1,y[0]=1,y[1]=0;
    for(j=1;j<=n;j++)
    {
        memset(x,0,sizeof(x));//清空阶乘数组
        x[0]=a[0];
        for(i=1;i<=a[0];i++){x[i]+=a[i]*j,x[i+1]=x[i]/10,x[i]%=10;}//模拟阶乘
        while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}//加上阶乘
        for(i=1;i<=x[0];i++){a[i]=x[i];}
        a[0]=x[0];
        add();
    }
    for(i=y[0];i>=1;i--){cout<<y[i];}//倒序存储就要倒序输出
    return 0;
}

 

以上是关于P1009 阶乘之和的主要内容,如果未能解决你的问题,请参考以下文章

洛谷——P1009 阶乘之和

洛谷 P1009 阶乘之和

P1009 阶乘之和

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

入门3循环结构

入门3循环结构