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;
}
};