news 2026/9/9 23:13:05

洛谷P1601 P1303 P1009题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷P1601 P1303 P1009题解

洛谷P1601 P1303 P1009题解

作者:爱吃大芒果

个人主页 爱吃大芒果

本文所属专栏 从0到1自学C++

更多专栏

Ascend C 算子开发教程(进阶)
鸿蒙集成
Flutter


P1601 A+B Problem(高精)

P1601题目链接

题目分析

高精度加法要模拟出我们平时做加法的过程,从个位开始逐位相加,并处理进位问题。由于输入的数字可能非常大,无法用普通的数据类型存储,因此我们使用数组来存储每一位数字。代码要满足将字符串转化为倒序数组,实现加法运算,处理进位问题,最后输出结果的要求。

将字符串转化为倒序数组

for(inti=0;i<s1.size();i++){a1[s1.size()-i-1]=s1[i]-'0';}

处理进位问题

for(inti=0;i<len;i++){if(a3[i]>=10){a3[i+1]=a3[i+1]+a3[i]/10;a3[i]=a3[i]%10;}}
AC代码
#include<bits/stdc++.h>usingnamespacestd;intmain(){string s1,s2;// 定义字符串存储输入的大数inta1[210]={0},a2[210]={0},a3[210]={0};// 定义数组存储大数并初始化为0getline(cin,s1);// 使用getline函数读取整行输入getline(cin,s2);for(inti=0;i<s1.size();i++){a1[s1.size()-i-1]=s1[i]-'0';// 将字符转换为整数并存储在a1数组中}for(inti=0;i<s2.size();i++){a2[s2.size()-i-1]=s2[i]-'0';// 将字符转换为整数并存储在a2数组中}intlen=max(s1.size(),s2.size());// 计算较大数的长度for(inti=0;i<len;i++){a3[i]=a1[i]+a2[i];// 对应位相加}for(inti=0;i<len;i++){if(a3[i]>=10){// 处理进位a3[i+1]=a3[i+1]+a3[i]/10;a3[i]=a3[i]%10;// 取余}}if(a3[len]!=0)len++;// 如果最高位有进位,长度加1for(inti=len-1;i>=0;i--)cout<<a3[i];// 输出结果return0;}

P1303 计算阶乘(高精)

P1303题目链接

题目分析

计算大数阶乘需要模拟乘法运算,并处理进位问题。由于阶乘结果可能非常大,无法用普通的数据类型存储,因此我们和高精度加法一样使用数组来存储每一位数字。代码要满足初始化数组,逐步计算阶乘,处理进位问题,最后输出结果的要求。

AC代码
#include<bits/stdc++.h>usingnamespacestd;intmain(){string s1="",s2="";// 定义字符串存储大数inta[10001]={0},b[10001]={0},c[10001]={0};// 定义数组存储大数并初始化为0cin>>s1>>s2;for(inti=0;i<s1.size();i++){a[s1.size()-i-1]=s1[i]-'0';//和高精度加法一样,将字符转换为整数并倒序存储}for(inti=0;i<s2.size();i++){b[s2.size()-i-1]=s2[i]-'0';}for(inti=0;i<s2.size();i++){for(intj=0;j<s1.size();j++){c[j+i]=c[j+i]+a[j]*b[i];// 逐位相乘并相加if(c[j+i]>=10){c[j+i+1]+=c[j+i]/10;// 处理进位c[j+i]=c[j+i]%10;}}}intindex=0;// 定义index变量存储结果的最高位intlen=s1.size()+s2.size();for(inti=len-1;i>=0;i--){// 从最高位开始寻找非0位if(c[i]!=0){// 如果当前位不为0,则将index设置为当前位,并跳出循环index=i;break;}}for(inti=index;i>=0;i--)// 输出结果cout<<c[i];return0;}

P1009 阶乘之和(高精)

P1009题目链接

题目分析

计算阶乘之和需要用到刚刚完成的高精度加法和乘法,把他们用函数封装起来,然后调用函数即可。

使用 memset 函数在每次函数调用时重置数组,由于a, b, c 是全局数组,它们会保留上一次函数调用的值
如果不清零,上一次计算的结果会干扰当前计算

memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof©);

注意去除前导0

while (lenc > 1 && c[lenc - 1] == 0) lenc–;
for (int i = lenc - 1; i >= 0; i–) {
res += char(c[i] + ‘0’);
}

AC代码
#include<bits/stdc++.h>usingnamespacestd;intn,a[10010]={0},b[10010]={0},c[10010]={0};string mul="1",sum="0";// 定义字符串存储阶乘和阶乘之和stringadd(string x,string y){// 高精度加法函数memset(a,0,sizeof(a));// 清零数组memset(b,0,sizeof(b));memset(c,0,sizeof(c));intlena=x.length(),lenb=y.length(),lenc=max(lena,lenb);for(inti=0;i<lena;i++)a[i]=x[lena-1-i]-'0';for(inti=0;i<lenb;i++)b[i]=y[lenb-1-i]-'0';for(inti=0;i<lenc;i++){c[i]+=a[i]+b[i];c[i+1]+=c[i]/10;c[i]=c[i]%10;}string res="";// 构建结果字符串if(c[lenc]>0)lenc++;// 如果最高位有进位,长度加1for(inti=lenc-1;i>=0;i--)res+=c[i]+'0';// 将结果转换为字符串returnres;}stringmulti(string x,string y){// 高精度乘法函数memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));intlena=x.length(),lenb=y.length();for(inti=0;i<lena;i++)a[i]=x[lena-1-i]-'0';for(inti=0;i<lenb;i++)b[i]=y[lenb-1-i]-'0';for(inti=0;i<lena;i++){for(intj=0;j<lenb;j++){c[i+j]+=a[i]*b[j];c[i+j+1]+=c[i+j]/10;c[i+j]=c[i+j]%10;}}string res="";// 构建结果字符串intlenc=lena+lenb;while(lenc>1&&c[lenc-1]==0)lenc--;// 去除高位的0for(inti=lenc-1;i>=0;i--){res+=char(c[i]+'0');}returnres;}intmain(){cin>>n;for(inti=1;i<=n;i++){mul=multi(mul,to_string(i));//to_string(i)将整数i转换为字符串sum=add(sum,mul);}cout<<sum<<endl;return0;}

总结

以上就是洛谷P1601 P1303 P1009题解的全部内容。
希望对你有所帮助。
如果有任何问题,欢迎交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 18:21:37

AutoAWQ模型量化实战:3倍性能提升的完整指南

AutoAWQ模型量化实战&#xff1a;3倍性能提升的完整指南 【免费下载链接】AutoAWQ AutoAWQ implements the AWQ algorithm for 4-bit quantization with a 2x speedup during inference. 项目地址: https://gitcode.com/gh_mirrors/au/AutoAWQ 还在为大语言模型推理速度…

作者头像 李华
网站建设 2026/9/3 8:22:30

如何快速解决Linux无线网卡兼容性问题:RTL8188EU驱动完整指南

如何快速解决Linux无线网卡兼容性问题&#xff1a;RTL8188EU驱动完整指南 【免费下载链接】rtl8188eu Repository for stand-alone RTL8188EU driver. 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8188eu 还在为Linux系统无法识别无线网卡而烦恼吗&#xff1f;RTL8…

作者头像 李华
网站建设 2026/9/3 8:22:31

终极指南:如何用IINA打造完美的macOS视频播放体验

终极指南&#xff1a;如何用IINA打造完美的macOS视频播放体验 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina 还在为macOS上找不到好用的视频播放器而烦恼吗&#xff1f;IINA视频播放器作为专为苹果用户设计的播放工具&#xff0c;完美解决…

作者头像 李华
网站建设 2026/9/8 7:14:18

24、《测试驱动开发与设计模式中的测试挑战及解决方案》

《测试驱动开发与设计模式中的测试挑战及解决方案》 1. 测试性与设计模式带来的挑战 可测试性是衡量代码质量的重要线索,但使用设计模式有时却会引发测试问题。如果设计模式反映的特性正是测试期望引导我们达成的,为何使用模式反而让测试变得更难了呢? 就像一个著名的故事…

作者头像 李华
网站建设 2026/9/8 6:31:05

33、软件设计中的沟通、模式与可维护性

软件设计中的沟通、模式与可维护性 1. 沟通的本质与软件的类比 在交流中,我们常常忽略了一个重要的事实:语言只是沟通的“令牌”。就像几年前参加的一门关于语言和信息传递的课程中提到的,两个人交谈时,话语本身并非沟通,而是沟通意义的代表。在任何形式的交流里,都存在…

作者头像 李华
网站建设 2026/9/3 2:34:49

终极图像标注工具:COCO Annotator完整使用指南

终极图像标注工具&#xff1a;COCO Annotator完整使用指南 【免费下载链接】coco-annotator :pencil2: Web-based image segmentation tool for object detection, localization, and keypoints 项目地址: https://gitcode.com/gh_mirrors/co/coco-annotator COCO Annot…

作者头像 李华