Add to List 67

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

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

实值相加会有问题,超过int上限就会报错,代码如下:

class Solution {
public:
    string addBinary(string a, string b) {
 		string c_string;
		stringstream c;
		int numa = 0;
		int numb = 0;
		int output;
		int lengtha = a.size();
		int lengthb = b.size();


		for (int i = lengtha; i > 0; i--)
		{
			int d = pow(2, i - 1);
			numa = numa + (a[i - 1]-'0') * pow(2,lengtha-i);
		}
		for (int i = lengthb; i > 0; i--)
		{
			numb = numb + (b[i - 1] - '0') * pow(2,lengthb-i);
		}
		output = numa + numb;
		if (numa == 0&&numb==0)
			return "0";
		while (output != 0)
		{
			c << (output%2);
			output >>= 1;
		}

		c_string = c.str();
		stringstream trans_string;
		int lengthstring = c_string.size();
		int i = 0;
		int j = lengthstring;
		while (i<lengthstring)
		{
			trans_string << c_string[j-1];
			i++;
			j--;
		}
		c_string = trans_string.str();
		return c_string;
    }

};
采用补位逐位运算:

class Solution {
public:
    string addBinary(string a, string b) {
     string ret;
     int la=a.size();
     int lb=b.size();
     int s=0;
     int sj=0;
     int add='0';
     int lmax=max(la,lb);
     for(int i=0;i<lmax;i++)
     {
        char ca=la>i?a[la-1-i]:'0';
        char cb=lb>i?b[lb-1-i]:'0';
        char s=(ca==cb?'0':'1');
        char sj=(s==add?'0':'1');
        if(s==add&&add=='1'||ca=='1'&&cb=='1')
            add='1';
        else
            add='0';
     
        ret+=sj; 
     }
    if(add=='1')
        ret+=add;
    reverse(ret.begin(),ret.end());
    return ret;
    }

};




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值