大整数加法计算

普通数字的运算,我们可以直接运用已有类型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;
}

现在我们可以轻松计算超大整数的加法运算了。

posted @ 2018-07-22 13:18  cpluspluser  阅读(4271)  评论(0编辑  收藏  举报