大数运算之大数加法(C++)
众所周知,加法运算是小学一年级的学生就懂的知识点。即从两个数个位开始,按位相加,逢十进一。
对于懂得C++的你而言,so so so easy! 只需要利用加法运算符即可
但若你要处理的数值位数十分巨大,如两个位数为20的数相加。在纸上进行运算十分简单,但在C++中直接使用加法运算符却无法实现你的预期,这是因为数值太大了,即使是使用长整型也无法存储如此大的数据。因此我们会想:不妨利用数组来模拟小学一年级就学过的加法运算思想。
实现代码如下
class Solution {
public:
string addBinary(string a, string b)
{
string str;
int carry = 0;//进位项
for(int i = a.size() - 1, j = b.size() - 1; i >= 0 || j >= 0 || carry; --i, --j)
{
int x = i < 0 ? 0 : a[i] - '0';//将字符转换为整数,方便计算
int y = j < 0 ? 0 : b[j] - '0';
int sum = (x + y + carry) % 10;
carry = (x+y+carry) / 10;
str.insert(0, 1, sum + '0');
}
return str;
}
};