1. 程式人生 > >大整數求和

大整數求和

整數位數 更多 std ret 技術分享 ace reverse img ima

大整數求和

  摘要:對於一些大整數,如果超出電腦整型數所能表示的最大範圍,應該怎麽計算加法呢?我們可以利用字符串進行求和,具體代碼如下:

 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 }

 運行結果如下:

 技術分享圖片

大整數求和