- 二进制求和
已解答
简单
相关标签
相关企业
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"
提示:
1 <= a.length, b.length <= 104
a 和 b 仅由字符 '0' 或 '1' 组成
字符串如果不是 "0" ,就不含前导零
解题思路
将两字符串倒置,依次进行相加,遇到二进位。
cpp
class Solution {
public:
string addBinary(string a, string b) {
string answer;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int n = max(a.size(),b.size());
int carry = 0; //进位值
for(size_t i=0;i<n;i++)
{
/*根据当前位置 i 的字符值来更新 carry(进位)
如果超出字符串的长度填充0,如果没超出等于一就返回1,
不等于1就是0
*/
carry += ( i<a.size() ? (a.at(i)=='1') : 0 );
carry += (i < b.size() ? (b.at(i)=='1') : 0 );
answer.push_back( (carry % 2) ? '1' : '0');
carry /= 2;
/* carry /= 2; 这一操作更新 carry,决定是否有进位需要带到下一位的计算中。例如,当 carry 为 2 或 3 时,需要产生进位 1,因此 carry /= 2 的结果为 1,即将进位传递给下一位。*/
}
if(carry)
{
//如果还有进位,插入1.
answer.push_back('1');
}
reverse(answer.begin(),answer.end());//-逆序
return answer;
}
};