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 }
这里这个代码是很好的一个模板,很简洁。
高精度加法就是用数组来存储加数,然后模拟竖式运算一位一位的加
加的时候会产生进位,主要是要处理好这个进位