[NOIP1998 普及组] 阶乘之和

题目链接

题目描述
用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。

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

输入格式
一个正整数 n。

输出格式
一个正整数 S,表示计算结果。

输入输出样例
输入 #1
3
输出 #1
9
说明/提示
【数据范围】

对于 100 % 的数据,1≤n≤50。

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 n \le 20n≤20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

代码:

#include<iostream>
using namespace std;
int a[2000], b[2000], c[2000], sum[2000];
void pplus(int *a, int *c)
{
    int jw = 0;
    for(int i = 1; i <= 1000; i++)
    {
        c[i] += a[i] + jw;
        jw = c[i] / 10;
        c[i] %= 10;
    }
}
void cheng(int *a, int c)
{
    int jw = 0;
    for(int i = 1; i <= 1000; i++)
    {
        a[i] = a[i] * c + jw;
        jw = a[i] / 10;
        a[i] %= 10;
    }
}
int main()
{
    int n;
    cin >> n;
    a[1] = 1;
    for(int i = 1; i <= n; i++)
    {
        cheng(a, i);
        pplus(a, c);
    }
    bool flag = 0;
    for(int i = 1000; i >= 1; i--)
    {
        if(c[i] != 0) flag = 1;
        if(flag) cout << c[i];
    }
    return 0;
}
上一篇:高级案例(2017年下答案)


下一篇:LC5666. 回文串分割 IV(区间dp)