二进制求和——模拟进借位操作
题目描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例1:
输入: a = "11", b = "1"
输出: "100"
示例2:
输入: a = "1010", b = "1011"
输出: "10101"
题解:
借位符C,初始设置位0,先得到 a,b 字符串的最长值,len为计算次数。每次运算使C=C+a[i]+b[i], 然后C取余2 即Cmod2 即为对应位置的结果值,C/2 即为下一次计算的借位值。
class Solution {
public:
string addBinary(string a, string b) {
int len_a=a.length();
int len_b=b.length();
vector<int> ans;
string str="";
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int len=max(len_a,len_b);
int c=0;
for(int i=0;i<len;++i){
c+=(i<len_a&&a[i]=='1')?1:0;
c+=(i<len_b&&b[i]=='1')?1:0;
ans.push_back(c%2);
c=c/2;
}
if(c==1){
ans.push_back(c);
}
for(auto p:ans){
str+=p+'0';
}
reverse(str.begin(),str.end());
return str;
}
};