大整数加法计算
普通数字的运算,我们可以直接运用已有类型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;
}
现在我们可以轻松计算超大整数的加法运算了。