大整數加法計算


普通數字的運算,我們可以直接運用已有類型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;
}

現在我們可以輕松計算超大整數的加法運算了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM