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

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 }

 

 

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

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

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

 

 






原文地址:https://www.cnblogs.com/fate-/p/12266278.html