给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字
1
和0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:输入: a = "1010", b = "1011"
输出: "10101"
C++解法:
class Solution {
public:
string addBinary(string a, string b) {
string res;
int la = a.size() - 1; //减一是为了不超出循环
int lb = b.size() - 1;
int carry = 0; //表示进位
while(la>=0||lb>=0||carry!=0)
//表示字符串a,b若其中有任意一个没有遍历完都接着进行循环,如果进位还有值也继续循环
//循环结束条件:字符串a和b都遍历完了并且进位也为0了,则结束循环
{
//表示若字符串a没有循环完,则令字符串a此次循环的值为now_a,若循环完了则令此次的值为0
int now_a = la >= 0 ? a[la]-'0' : 0;
int now_b = lb >= 0 ? b[lb]-'0' : 0;
int sum = now_a + now_b + carry; //求和要写在进位的上面
carry = sum >= 2 ? 1 : 0; //判断是否进位
sum = sum >= 2 ? sum-2 : sum; //限定sum的值不超过等于2
res += to_string(sum); //注意是 += !!!
la--;
lb--;
}
reverse(res.begin(),res.end()); //反转字符串,得到结果
return res;
}
};
提示:
- to_string(参数) 功能是将数字常量转换为字符串
- 将字符串中的数字转成整形不能直接强制类型转换,这样可能导致对内存进行非法操作, 我们可以另其减去 '0' 这样就可以啦 列如: '7' - '0' 两个字符型相减,通过查ASCII表可知 7对于55,0对应48,55-48=7 通过这一方法就可得到我们想要的结果了