贤鱼的刷题日常--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];
    }
}

高精度计算

高精度加法

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

高精度乘法

在这里插入图片描述

以此类推

在这里插入图片描述

最后相加就好了

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

请添加图片描述

相关文章
|
前端开发 JavaScript Java
Element-UI中Select选择器讲解(el-select详解)
案例详解Element-UI中Select选择器讲解,手把手教学!
1355 0
Element-UI中Select选择器讲解(el-select详解)
|
4月前
|
JSON 数据可视化 物联网
基于STM32和FreeRTOS的实时天气系统设计与实现【免费开源】
随着物联网(IoT)技术的发展,实时数据监测系统逐渐成为日常生活和工业环境中不可或缺的组成部分。其中,气象监测系统不仅可以提供温度、湿度、天气状况等信息,还可以通过数据分析为农业、城市管理和个人生活提供智能化建议。本项目以STM32F407为核心控制器,结合FreeRTOS实时操作系统和ESP8266 Wi-Fi模块,实现一套高可靠、实时更新的智能气象监测系统。同时,系统集成了计时功能,通过串口屏将实时数据可视化展示,为用户提供直观的操作体验。
基于STM32和FreeRTOS的实时天气系统设计与实现【免费开源】
|
应用服务中间件 nginx
流媒体技术学习笔记之(十四)FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务
FFmpeg推送视频流,Nginx RTMP模块转发,VLC播放器播放,实现整个RTMP直播 查看本机电脑的设备 ffmpeg -list_devices true -f dshow -i dummy 红色标记表示视频设备和麦克风设备 看到乱码了吧!来这里查看哦   FFmpeg编码推送到R...
3912 0
|
程序员 区块链
程序员职业发展路线图(完整版+珍藏版)
程序员职业发展路线图(完整版+珍藏版)
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
229 6
按条件将Excel文件拆分到不同的工作表
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
2986 0
高精度算法(加、减、乘、除,使用c++实现)
|
Web App开发 JSON JavaScript
爬取王者荣耀图片
【10月更文挑战第11天】爬取王者荣耀图片。
1310 2
|
Web App开发 Linux 数据安全/隐私保护
Docker本地部署开源浏览器Firefox并远程访问进行测试
Docker本地部署开源浏览器Firefox并远程访问进行测试
715 1
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
存储 关系型数据库 MySQL
【必看】MySQL中float、double、decimal三个浮点数据类型的区别与总结!
你还不知道MySQL中float、double、decimal三个浮点类型的区别吗?快来看看吧!
1613 0
【必看】MySQL中float、double、decimal三个浮点数据类型的区别与总结!