大数字加法

 1 2 3 4  (a)

+     2 9  (b)

————

=1 2 6 3

carry即是进位也是用来保存两个加数之和,因为进位就是两数之和去 %进制 产生的

下面判断条件,b结束,a不结束,但是此时不能结束循环,a还要继续加法,没有

#include<iostream>
#include<string>
#include<vector>//容器头文件 
#include<algorithm> //算法头文件 
#include <vector>
#include <typeinfo>
using namespace std;
//大数字加法
string bigadd(string a,string b){
	string ans;
	int i = a.length() - 1;
	int j = b.length() - 1;
	int carry = 0;
//carry就是保存acrry+a[i]+b[j]的得数,把得数进行 % 和 /保留个位和十位(进位)
/*
    9
+ 9 9  
————
1 0 8
这时,ij会先变为-1,但是carry依旧有进位,所以循环是必须有carry!=0这个条件,让ij变为-1
但任有进位时也会去加这个进位
*/  
	
    while(i >= 0 || j >= 0 ||carry != 0){ //有进位不结束,carry最后和i或j一起结束为0 
		if(i >= 0) carry += a[i--] - '0'; 
		if(j >= 0) carry += b[j--] - '0';
		
//下面的10,是因为这是个十进制的加法,如果要n进制,就把10改为n,%10算出10进制个位
		ans+=to_string(carry % 10); //to_string()转字符串 
//这是计算出十位,拿来做进位去下一轮计算
		carry/=10;
	}
	reverse(ans.begin(),ans.end()); //reverse翻转 
	return ans;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值