贤鱼的刷题日常--P1009 [NOIP1998 普及组] 阶乘之和--详细题解

简介: 🍀学会阶乘之和题目
🏆今日学习目标:
🍀学会阶乘之和题目
✅创作者:贤鱼

请添加图片描述

题目

用==高精度计算==出 !S=1!+2!+3!+⋯+n!(0n≤50)。
其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入 #1复制
3
输出 #1复制
9
说明/提示
【数据范围】
对于 100% 的数据,1≤n≤50。

代码

50分代码

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int s=1;
        for(int j=1;j<=i;j++){
            s*=j;
        }
        ans+=s;
    }
    cout<<ans;
}
这个应该是最基础的做法了,但是对于洛谷上只能拿到一半的分

AC代码

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans,a[1001],b[1001];
void c(int x){//高精度乘法
    int g=0;
    for(int i=100;i>=0;i--){
        a[i]=a[i]*x+g;//直接乘
        g=a[i]/10;//进位
        a[i]%=10;//取出余数,相当于进位完剩下的
    }
}
void j(){//高精度加法
    int q=0;
    for(int i=100;i>=0;i--){
        b[i]+=a[i]+q;//这里直接加
        q=b[i]/10;//进位处理
        b[i]%=10;//同上
    }
}
int main(){
    cin>>n;
    a[100]=b[100]=1;
    for(int i=2;i<=n;i++){
        c(i);
        j();
    }
    int xy=0;//这里需要单独判断一下计算完的数字长度
    for(int i=0;i<=100;i++){
        if(b[i]){

        xy=i; break; 
    }
    }//以下直接输出就好
    for(int i=xy;i<=100;i++){
        cout<<b[i];
    }
}

高精度计算

高精度加法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

高精度乘法

在这里插入图片描述

以此类推

在这里插入图片描述

最后相加就好了

==🏆如果对您有帮助的话可以订阅一下专栏,持续跟新==

请添加图片描述

相关文章
|
7月前
|
C++
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(字符串)
**NOIP2011普及组题目:给定整数N,反转其位得到新数。新数首位非0(除非N=0)。输入0时直接输出0,其他情况输出反转后的数,考虑负数及前导0。提供的C++代码实现通过读入字符串,反转数字顺序并处理符号和前导0。**
39 0
|
7月前
【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
NOIP2013普及组计数问题,求区间[1, n]内数字x出现的次数。输入为n和x,输出x的出现次数。样例输入11 1,输出4。代码通过逐位检查每个数是否等于x来计数,适用于$n\leq10^6$,$0\leq x\leq 9$的情况。
83 0
|
7月前
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(取余)
NOIP2011普及组试题,要求反转整数N的位得到新数,保持正负号和非零最高位。输入一个整数N,输出反转后的新数。样例输入1:123,输出:321;样例输入2:-380,输出:-83。代码使用取余法实现,处理负数时保留符号。
61 0
|
7月前
【洛谷 P1909】[NOIP2016 普及组] 买铅笔 题解(打擂台法)
**摘要:** P老师需买$n$支铅笔作礼物,商店有3种包装(数量、价格不等),不能拆包。目标是最少花费。输入包括$n$和每种包装的详情,输出最小花费。样例展示最优选择过程。代码使用打擂台法求解,读入$n$和包装信息,计算每种包装的最小花费,取最小值输出。
83 0
|
7月前
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
147 0
|
7月前
|
C++
【洛谷 P1085】[NOIP2004 普及组] 不高兴的津津 题解(打擂台法)
**NOIP2004 普及组问题:津津的日程检查。津津每日上课时间若超8小时会不高兴。输入7行代表一周课程,输出最不高兴的日期(1-7)或0。示例输入/输出:5 3 6 2 7 2 5 3 5 4 0 4 0 6 -&gt; 3。使用C++代码通过遍历计算最大上课时间并找到对应日期。**
44 0
|
7月前
【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
**NOIP2007普及组奖学金问题**:根据学生语文、数学、英语三科成绩计算总分并排序。若总分相同,按语文成绩高者优先,再相同则学号小者靠前。程序需输出前5名学生的学号和总分。输入包括学生人数`n`和每人的三科成绩,输出为5行结果。示例输入和输出已给出,代码通过定义结构体和自定义比较器实现排序。
57 0
|
7月前
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
86 0
|
7月前
|
C++
【洛谷 P1075】[NOIP2012 普及组] 质因数分解 题解(判断质数)
NOIP2012普及组题目,给定合数$n$由两个不同质数乘积组成,求较大质数。输入一个正整数$n$,输出较大质因子。例如输入21,输出7。代码使用C++,通过循环和质数判断找到能整除$n$的质数,再求另一个质数,并输出较大者。
88 0
|
7月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
76 0

热门文章

最新文章

下一篇
开通oss服务