[蓝桥杯][基础训练]高精度加法

Description

输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

Input

输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

Output

输出一行,表示a + b的值。

Sample Input

20100122201001221234567890
2010012220100122

Sample Output

20100122203011233454668012

More Info

由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。



复制代码
 1 #include<iostream>
 2 //#include<fstream>
 3 using namespace std;
 4 int main(){
 5     int k=0,c[103];//c数组用来存储和 
 6     int t=0;//1.用来当第一个加数与第二个加数与进位的和
 7             //2.t/10以后可以当新的进位 
 8     string a,b;
 9 //    fstream file("haha.txt");
10     getline(cin,a);
11     getline(cin,b);
12     int la=a.size()-1;
13     int lb=b.size()-1;
14     while(la>=0||lb>=0){ //一位一位的加 ,从后边开始 
15         if(la>=0&&lb>=0)//如果两个加数都有,
16                         //就加a那一位和b那一位和进位的和 
17             t+=a[la]-'0'+b[lb]-'0';
18         if(la>=0&&lb<0) //如果缺b,就只加a那一位和进位的和 
19             t+=a[la]-'0';
20         if(la<0&&lb>=0)//如果缺a,就只加b那一位和进位的和 
21             t+=b[lb]-'0';
22         c[k++]=t%10;//t对10取模后的数存进c数组 
23         t=t/10;//t/10以后成为新的进位 
24         la--;//进行下一位 
25         lb--;//进行下一位            
26     }
27     if(t!=0)//如果最高的位有进位,那么把这个进位也要输出
28             //比如99+1,如果没有这一步的话,结果就是00 
29         c[k++]=t; 
30     for(int i=k-1;i>=0;i--)//倒着输出 
31         cout<<c[i];
32     return 0;
33 }
复制代码

 

 

这里这个代码是很好的一个模板,很简洁。

高精度加法就是用数组来存储加数,然后模拟竖式运算一位一位的加

加的时候会产生进位,主要是要处理好这个进位

 

 






posted @   ice--cream  阅读(480)  评论(3编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示