普通數字的運算,我們可以直接運用已有類型int, long, long long等等計算,但要是數字非常大,這些類型是遠遠裝不下的。
故而很多情況下需要我們自己來設置大整數運算,本篇記錄的是大整數的加法運算的方法。
對於加法運算,第一個方法是模擬手算。先來看看手算的步驟:
手算的時候,我們會先把個位相加,有進位則向前進一位,然后計算下一位,重復此步驟。若兩個數的位數不同,計算時我們會把位數長的放在上面,位數短的放在下面。短位的數加完后,長位的數則和0相加。
實現加法計算的思路很簡單,首先把數字都當作字符串對待,因為字符串是可以根據內存無限長的。在C語言中我們可以用char數組來表示,C++可以用string。然后我們需要再定義一個保存的結果字符串,它的長度可以初步設置為較長數字的長度。
實現代碼:
#include <iostream>
#include <string>
std::string Add(std::string a, std::string b)
{
//a一直為位數較長的字符串
if (a.length() < b.length())
{
a.swap(b);
}
std::string result(a.length(), 0); //初步設置result長度為較長字符長度
b.insert(0, a.length() - b.length(), '0'); //較短的字符串前面補零,方便計算
int carry = 0; //進位
for (int i = a.length() - 1; i >= 0; i--)
{
int sum = (a[i] - 48) + (b[i] - 48) + carry;
carry = sum / 10;
result[i] = sum % 10 + 48;
}
//若進位不為0,還要在前面補上進位
if (carry != 0)
{
result.insert(result.begin(), carry + 48);
}
return result;
}
int main()
{
std::string a, b;
std::cin >> a >> b;
std::cout << Add(a, b);
std::cin.get();
return 0;
}
現在我們可以輕松計算超大整數的加法運算了。