LeetCode Add Binary 高精度二进制加法

Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a ="11"
b ="1"
Return"100".

就是简化版的高精度加法,但是,其实也不是简化了。

因为有一个特殊情况:如果进位是1,那么剩下一个数的时候后面的为都是1,那么1+1要进位,就要一直进位进到最高位+1了。

如11110101,到第五位要进位的话,就会一直进位超过最高位了,而这个在10进制中是没有的情况。

class Solution {
public:
	string addBinary(string a, string b) {
		int up = 0;
		int i = a.length()-1;
		int j = b.length()-1;
		string sum;
		int s = 0;

		for (; i >= 0 && j >= 0; i--, j--)
		{
			s = 	a[i]+b[j]+up-'0'-'0';
			up = s/2;
			sum.push_back(s%2+'0');
		}
		while (i>=0)
		{
			s = a[i] + up - '0';
			up = s/2;
			sum.push_back(s%2+'0');	
			i--;
		}
		while (j>=0)
		{
			s = b[j] + up - '0';
			up = s/2;
			sum.push_back(s%2+'0');
			j--;
		}
		if (up > 0)
		{
			sum.push_back(up + '0');
		}
		reverse(sum.begin(), sum.end()); 
		return sum;
	}
};


string addBinary(string a, string b) 
	{
		int na = a.length(), nb = b.length();
		int n = max(na, nb);
		string s(n+1, '0');//注意string和vector的初始化有所不一样的地方
		bool carry = false;
		for (na--,nb--; na>=0 || nb>=0; na--, nb--)
		{
			int a1 = na>=0? a[na]-'0':0;
			int b1 = nb>=0? b[nb]-'0':0;
			int sum = a1+b1+carry;
			carry = sum/2; 
			sum %= 2;
			s[n--] = sum + '0';
		}
		if (carry) s[n] = carry + '0';
		//注意:是s[1],因为当结果为0的时候需要保留‘0’,记住erase的使用方法
		while (s[1] && s[0] == '0') s.erase(s.begin());
		return s;
	}



//2014-2-8 update
	string addBinary(string a, string b) 
	{
		string c;
		int carry = 0;
		for (int i = a.length() - 1, j = b.length()-1; i >= 0 || j>=0 ; i--, j--)
		{
			int an = i>=0? a[i]-'0':0;
			int bn = j>=0? b[j]-'0':0;
			int sum = an + bn + carry;
			carry = sum/2;
			sum %= 2;
			c.push_back(sum+'0');
		}
		if (carry) c.push_back(carry+'0');

		reverse(c.begin(), c.end());
		return c;
	}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值