高精度:基础练习 高精度加法

问题描述
  输入两个整数ab,输出这两个整数的和。ab都不超过100位。
算法描述
  由于ab都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
  定义一个数组AA[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
样例输出
20100122203011233454668012
 
思路:先各位相加,最后判断是否进位,前几天写过,刚学了点c++,所以用c++又写了一下。
 1 #include<iostream>
 2 #include<string>
 3 
 4 using namespace std;
 5 
 6 #define max(a,b) (a > b ? a : b)
 7 
 8 void add(string longString, string shortString, int* num3)
 9 {
10     int k = -1;
11     int longLen = longString.size();
12     int shortLen = shortString.size();
13 
14     for (int i = 1; i <= longLen; i++)
15     {
16         num3[i] = longString[longLen - i] - 48;
17     }
18     for (int i = 1; i <= shortLen; i++)
19     {
20         num3[i] += shortString[shortLen - i] - 48;
21     }
22 }
23 
24 int main()
25 {
26     string num1;
27     string num2;
28     int *num3 = new int[102];
29     int k = -1;
30 
31     cin >> num1;
32     cin >> num2;
33 
34     if (num1.size() >= num2.size()) //如果1长1作为长字符串
35     {
36         add(num1, num2, num3);
37     }
38     else
39     {
40         add(num2, num1, num3); //如果2长2作为长字符串
41     }
42     
43     int m = max(num1.size(), num2.size());
44     for (int i = 1; i <= m; i++)
45     {
46         if (num3[i] >= 10)
47         {
48             num3[i] -= 10;
49             ++num3[i + 1];
50         }
51     }
52 
53     if (num3[m + 1] > 0)
54     {
55         m++;
56     }
57 
58 
59     for (int i = m; i >= 1; i--)
60     {
61         cout << num3[i];
62     }
63 
64     return 0;
65 }
原文地址:https://www.cnblogs.com/ZhengLijie/p/12696017.html