洛谷P1009 [NOIP1998 普及组] 阶乘之和

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

很水的一道题,无非是高精度乘法(高低乘)和高精度加法的结合体罢了,我的前一篇博客有高精度四件套,不会的可以去参考,思路都是一样的;

注意事项及代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[110];//用来储存阶乘结果 110是假设位数,可能不够,不够再添即可 
int b[110];//用来储存求和结果
void cheng(int *a,int x)
{
    int jw=0;//两个进位 
    for(int i=1;i<=110;i++)
    {
        a[i]=a[i]*x+jw;
        jw=a[i]/10;
        a[i]=a[i]%10;
    }
}
void add(int *a,int *b)
{
    int jw=0;//同上 
    for(int i=1;i<=110;i++)
    {
        b[i]=a[i]+b[i]+jw;
        jw=b[i]/10;
        b[i]=b[i]%10;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    a[1]=1;//从1开始 
    for(int i=1;i<=n;i++)//每次循环阶乘,求和 
    {
        cheng(a,i);
        add(a,b);
    }
    bool flag=0;//判断前导,如果是0就不输出,所以一开始定义为0,假设前导都是0 
    for(int i=110;i>=1;i--)
    {
        if(b[i]!=0) flag=1;//bool逻辑判段 
        if(flag==1)  printf("%d",b[i]);//如果满足条件,输出即可 
    }
    return 0;
}

 

posted @ 2022-02-11 23:04  江上舟摇  阅读(120)  评论(0编辑  收藏  举报