问题描述
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
输入格式
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
输出格式
输出一行,表示a + b的值。
样例输入
20100122201001221234567890
2010012220100122
2010012220100122
样例输出
20100122203011233454668012
1 /* 2 2020年3月24日17:37:59 3 蓝桥杯习题集 4 问题描述 5 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 6 算法描述 7 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 8 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 9 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r, 10 把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来, 11 即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中, 12 和的个位存到C[1]中。依此类推,即可求出C的所有位。 13 最后将C输出即可。 14 输入格式 15 输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。 16 输出格式 17 输出一行,表示a + b的值。 18 样例输入 19 20100122201001221234567890 20 2010012220100122 21 样例输出 22 20100122203011233454668012 23 */ 24 25 #include<iostream> 26 #include<string> 27 #include<cstring> 28 using namespace std; 29 const int maxn = 110; 30 31 int main() 32 { 33 string a,b; 34 while(cin >> a >> b) //输入两串数 35 { 36 int lena = a.length(); 37 int lenb = b.length(); 38 //倒叙存放入数组 39 int A[maxn] = {0},B[maxn] = {0},C[maxn] = {0}; 40 for(int i = 0;i < lena;i++) 41 { 42 A[i] = a[lena - i - 1] - '0'; 43 } 44 for(int i = 0;i < lenb;i++) 45 { 46 B[i] = b[lenb - i -1] - '0'; 47 } 48 int n = lena > lenb ? lena : lenb; //条件表达式 49 int x; 50 for(int i = 0;i < n;i++) 51 { 52 x = A[i] + B[i] + C[i]; 53 C[i] = x % 10; 54 C[i + 1] = x / 10; 55 } 56 57 //输出结果 58 if(C[n] == 0) 59 { 60 for(int i = n - 1;i >= 0;i--) 61 cout << C[i]; 62 cout << endl; 63 } 64 else 65 { 66 for(int i = n; i >= 0; i--) 67 cout << C[i]; 68 cout << endl; 69 } 70 //测试是否倒序 71 /*for(int j=0;j<lena;j++) 72 cout << A[j]; 73 cout << endl; 74 for(int j=0;j<lenb;j++) 75 cout << B[j]; 76 cout << endl;*/ 77 } 78 return 0; 79 }