二进制求和

三个版本

//
class Solution {
public:
    string addBinary(string a, string b) {
	string res="";
	a.length() > b.length() ? res += a : res += b;
	for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--,j--)
	{
		res[i>j?i:j] = (char)(a[i] + b[j]-48);
		if((i > j ? i : j)>0)
			if (res[i > j ? i : j] == '2')
			{
                                //可能出现3的情况,所以不能赋值处理,应该要“取余”
				res[(i > j ? i : j)] = '0';
				res[(i > j ? i : j)-1]+=(char)('1'-48);
			}
	}
	if (res[0] == '2')
	{
		res[0] = '0';
		return "1" + res;
	}
	else
		return res;
}
};

//没有考虑到会出现3的结果,不只是首位,中间也可以
class Solution {
public:
   string addBinary(string a, string b) {
	string res="";
	a.length() > b.length() ? res += a : res += b;
	for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--,j--)
	{
		res[i > j ? i : j] = (char)(a[i] + b[j] - 48);
	}
	for (int i = res.length() - 1; i >= 0; --i)
	{
		//这里可以统一当成ascll处理
		if (res[i] > 49&&i>0)
		{
			res[i] = '0';
			res[i - 1]++;
		}
	}
	if (res[0] == '2') 
	{
		res[0] = '0';
		return "1" + res;
	}
	else
		return res;
}
};

class Solution {
public:
	string addBinary(string a, string b) {
		string res = "";
		a.length() > b.length() ? res += a : res += b;
		for (int i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--, j--)
		{
			res[i > j ? i : j] = (char)(a[i] + b[j] - 48);
		}
		for (int i = res.length() - 1; i >= 0; --i)
		{
			//这里可以统一当成ascll处理
			if (res[i] > 49 && i > 0)
			{
				res[i] = res[i] % 49 + 47;
				res[i - 1]++;
			}
		}
		if (res[0] == '2')
		{
			res[0] = '0';
			return "1" + res;
		}
		if (res[0] == '3')
		{
			res[0] = '1';
			return "1" + res;
		}
		else
			return res;
	}
};

 暴漏的问题很多,以前都是字符串直接转换数字,然后在转回来,但是这次怕数字太大就直接字符串处理了。一开始一位可以直接赋值,而且进位没有考虑赋值导致进位少了一个进位(第二个版本中间的错误1010+1011=10001

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值