我们在做题的时候,处理字符串的时候,通常会碰到字符串的加减法,它们其实就是一个模板,只要我们多理解,就能快速的写出大数的加法,也就是string对象的加法。会了加减法,乘除法就肯定不用说了。
string对象的加法
算法思想:
- 加法的时候有时候,两个string的长度不同,所以就需要从低位开始算法,所以先将两个字符串string逆置过来
- 加法的时候,我们要考虑进位的问题。进的位还要参与下一次运算
- 有可能出现进位问题, 比如999 和 1 最后的结果是 1000 ,所以要先准备一个max(s1.size(),s2.size()) + 1的string变量
- 还有可能出现 s1 = 0099 s2 = 1234 。也就是s1要先将前面的0去掉,才可以完成加法。要不然都是 9900 + 4321,最后在逆置,答案就不对。应该是 99 + 4321 , 然后在逆置字符串
- 最后将整个字符串再逆置回来,就得到结果
大数的加法
string add(string a, string b)
{
b = b.substr(b.find_first_not_of('0')); //找到第一个不是0的位置。因为字符串有可能是 0000987
a = a.substr(a.find_first_not_of('0')); //找到第一个不是0的位置。
long long lenA = a.length();
long long lenB = b.length();
long long len = max(lenA, lenB) + 1; // 最后加出来的长度肯定不会超过 a,b最大长度 + 1.
//翻转,从低位逐步求和
reverse(a.begin(), a.end());
reverse(b.begin(), b.end<