码迷,mamicode.com
首页 > 其他好文 > 详细

大整数求和

时间:2018-04-04 12:30:45      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:整型   利用   center   enter   pos   iostream   数位   body   标记   

大整数求和

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

 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     // 最高位是否有进位,设置最高位的值
43     int d = (n > m) ? n : m;
44     if (flag == 1)
45         res+= 1;
46     // 反序结果串,结果即为所求
47     reverse(res.begin(), res.end());
48     return res;
49 }

 

 运行结果如下:

 技术分享图片

 

大整数求和

标签:整型   利用   center   enter   pos   iostream   数位   body   标记   

原文地址:https://www.cnblogs.com/smile233/p/8715810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!