【算法】大数(string)的加法与减法

我们在做题的时候,处理字符串的时候,通常会碰到字符串的加减法,它们其实就是一个模板,只要我们多理解,就能快速的写出大数的加法,也就是string对象的加法。会了加减法,乘除法就肯定不用说了。

string对象的加法

算法思想

  1. 加法的时候有时候,两个string的长度不同,所以就需要从低位开始算法,所以先将两个字符串string逆置过来
  2. 加法的时候,我们要考虑进位的问题。进的位还要参与下一次运算
  3. 有可能出现进位问题, 比如999 和 1 最后的结果是 1000 ,所以要先准备一个max(s1.size(),s2.size()) + 1的string变量
  4. 还有可能出现 s1 = 0099 s2 = 1234 。也就是s1要先将前面的0去掉,才可以完成加法。要不然都是 9900 + 4321,最后在逆置,答案就不对。应该是 99 + 4321 , 然后在逆置字符串
  5. 最后将整个字符串再逆置回来,就得到结果
大数的加法
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<
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值