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

这道题我们可以用一个子程序和两个一维数组来做,代码如下:

#include<bits/stdc++.h>//万能头文件 
using namespace std;//好习惯 
int a[510],b[510];//定两个一维数组,一个用于单个阶乘,另一个用于计算总量 
void f(int n)//子程序 
{
    for(int i=1; i<=500; i++)//我们会多次给这个数组赋值 ,所以一定要记得清零
    {
        a[i]=0;
    }
    int x=0;//设一个x用于进位 
    a[1]=1;//a[1]一定要赋值为一 
    for(int i=1; i<=n; i++)//这里是阶乘的循环 
    {
        for(int j=1; j<=500; j++)//这是数组的循环 
        {
            a[j]=a[j]*i+x;//这里是计算阶乘的核心代码 
            x=a[j]/10;//x为进位的数量 
            a[j]=a[j]%10;//a[j]一定要为除以10的余数 
        }
    }
}
int main()//主程序 
{
    int n;
    cin >> n;
    int x=0;//进位 
    bool boo=0;//设个bool量,为了后面输出 
    for(int i=1; i<=n; i++)
    {
        x=0;//进位一定要在开始的时候赋值为零 
         f(i);//调用子程序 
         for(int j=1;j<=500; j++)//阶乘和的核心代码 
         {
             b[j]=b[j]+a[j]+x;
             x=b[j]/10;
             b[j]=b[j]%10;
        }
    }
    for(int i=500; i>=1; i--)//倒序输出 
    {
        if(b[i]!=0) boo=1;//如果首位不等于0的数出现,那么boo=1
        if(boo==1)//如果boo==1
        {
            cout << b[i];//那么我们输出b[i] 
        }
    }
    return 0;//好习惯 
}

希望有大佬指点指点,谢谢。

制作不易,希望关注,特别感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值