给出2个二进制字符串,计算它们的和。例如"111"+"1"="1000"
思路:这道题比较简单,只需要将比较短的字符串高位扩充为0,然后模拟十进制相加即可。
class Solution {
public:
string addBinary(string a, string b) {
string sum;
int i;
string s1="";
string s2="";
int len1 = a.length(), len2 = b.length();
int len = (len1 >= len2 ? len1 : len2);
if (len1 < len2)
{
string tmp = a;
a = b;
b = tmp;
len1 ^= len2;
len2 ^= len1;
len1 ^= len2;
}
s1 = a;
sum.resize(len);
for(i=0; i<len-len2; i++)
{
s2 += "0";
}
for(i=0; i<len2; i++)
{
s2 += b.substr(i,1);
}
int flag = 0;
for(i=len-1; i>=0; i--)
{
if ((s2[i] - '0' + s1[i] - '0' + flag) % 2 == 0)
{
sum[i] = '0';
}
else
{
sum[i] = '1';
}
flag = (s2[i] - '0' + s1[i] - '0' + flag) / 2;
}
if (flag == 1)
{
a = "1";
a += sum;
return a;
}
return sum;
}
};