您当前的位置: 首页 > 

小天才才

暂无认证

  • 2浏览

    0关注

    168博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【洛谷】【高精度】P1009 [NOIP1998 普及组] 阶乘之和

小天才才 发布时间:2021-07-24 22:05:56 ,浏览量:2

题目链接:https://www.luogu.com.cn/problem/P1009

题目描述

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

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

输入格式

一个正整数 n。

输出格式

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

测试样例
输入
3

输出
9
解题思路

1.要注意高精度,可能会想到用__int128,但是当你算到45的阶乘是就会发现这个也不够用了,而且算的很慢,不如自己手写一个高精度,我在这里用的是一个一位数组。

2.要注意输出,可能最后结果在数组里有很多空间,也就是数组的前面几位可能都是0,那么这些0是不需要输出的,我们只要从第一个不为0的数开始输出就行了。

AC代码
#include
using namespace std;

int a[101],b[101];
//每一个数的阶乘
void mul(int n)
{
    int q = 0;
    for(int i=100;i>=0;i--)
    {
        b[i] = b[i] * n + q;
        q = b[i] / 10;
        b[i] = b[i] % 10;
    }
}
//阶乘完之后的加法
void add()
{
    int q = 0;
    for(int i=100;i>=0;i--)
    {
        a[i] = a[i] + b[i] + q;
        q = a[i] / 10;
        a[i] = a[i] % 10;
    }
}

int main()
{
    int n;
    cin>>n;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    a[100] = 1;
    b[100] = 1;
    //开始计算
    for(int i=2;i            
关注
打赏
1658396332
查看更多评论
0.0432s