问题描述:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
问题求解:
二进制加法都是从最低位开始加(从右加到左)。所以对两个字符串要从最后一位开始加。每次相加之前先加上进位。
class Solution {
public:
string addBinary(string a, string b) {
string sum = "";
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;//保存进位
while (i >= 0 || j >= 0 || carry > 0) {
int v = carry;//首先把上次的进位赋给该位的和
if (i >= 0) v += a[i] - '0'; //c-‘0’将字符数c转换为整型数
if (j >= 0) v += b[j] - '0';
//二进制基数为2,每次将同位的数字相加后,除以基数就是进位
carry = v / 2;
//若v是偶数则v&1=0,若v是奇数则v&1=1
//二进制每位上的数要么是0要么是1则可使用v&1
//即如果v=2,则进一位.该位为0
sum = to_string(v&1) + sum;
i--;
j--;
}
return sum;
}
};