给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
先将短的字符串进行补全,然后从最后面(最低位)开始逐位相加,由于是char类型所以运用(ASCII码 - '0')来表示1和0并且,注意。最高位的处理还有sum值四种可能0,1,2,3,当sum>=2 时需要进位并且当前位取值应该位sum - 2,即2的时候应该取0,3的适合取1。
string addBinary(string a, string b) {
int asize = a.size();
int bsize = b.size();
while (asize < bsize)
{
a = '0' + a;
asize++;
}
while (bsize < asize)
{
b = '0' + b;
bsize++;
}
int sum = 0;
int add = 0;
for (int i = asize-1; i > 0; i--)
{
sum = a[i] - '0' + b[i] - '0'+add;
add = 0;
if (sum >= 2)
{
add++;
sum -= 2;
}
a[i] = char('0' + sum);
}
sum = a[0] - '0' + b[0] - '0'+add;
if (sum >= 2)
{
a[0] = char('0'+sum - 2);
a = '1' + a;
}
else
a[0] = char('0'+sum);
return a;
}