大整数求和

大整数求和

  摘要:对于一些大整数,如果超出电脑整型数所能表示的最大范围,应该怎么计算加法呢?我们可以利用字符串进行求和,具体代码如下:

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 string Add(string &str1, string &str2);
 5 int main()
 6 {
 7     string str1, str2;
 8     cin >> str1 >> str2;
 9     cout << Add(str1, str2) << endl;
10  }
11 
12 string Add(string & str1, string & str2)
13 {
14     int flag = 0;  // 进位标记
15     int i = 0; // 位数
16     int n = str1.size();
17     int m = str2.size();
18     // 整数是从最低位开始相加,所以先将字符串反序
19     reverse(str1.begin(), str1.end());
20     reverse(str2.begin(), str2.end());
21     string res = "";// 存放结果的串
22     while (i < n && i < m)
23     {        
24         res+=(((str1[i] - '0') + (str2[i] - '0') + flag) % 10 + '0');// 计算第i位的值
25         flag = ((str1[i] - '0') + (str2[i] - '0') + flag) / 10;    // 计算第i位的进位
26         i++;
27     }
28     // 如果str1表示的整数位数更多,计算大整数str1余下的部分
29     while (i < n)
30     {    
31         res+= (((str1[i] - '0') + flag) % 10 + '0');// 计算第i位的值
32         flag = ((str1[i] - '0') + flag) / 10;    // 计算第i位的进位
33         i++;
34     }
35     // 如果str2表示的整数位数更多,计算大整数str2余下的部分
36     while (i < m)
37     {        
38         res+= (((str2[i] - '0') + flag) % 10 + '0');// 计算第i位的值
39         flag = ((str2[i] - '0') + flag) / 10;    // 计算第i位的进位
40         i++;
41     }
42     // 最高位是否有进位,设置最高位的值44     if (flag == 1)
45         res+= '1';
46     // 反序结果串,结果即为所求
47     reverse(res.begin(), res.end());
48     return res;
49 }

 运行结果如下:

 大整数求和