题目描述:
输入两个二进制字符串,每行一个
返回两个二进制字符串求和后的二进制字符串
示例:
输入:
11
1
输出
110
思路:
模拟二进制的加法。记得保存进位
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Solution {
public:
string addBinary(string& s1, string& s2) {
string result = "";
int carry = 0, sum = 0; // c用来保存余数
int i = s1.size() - 1, j = s2.size() - 1;
while (i >= 0 && j >= 0) {
sum = (s1[i--] - '0') + (s2[j--] - '0') + carry;
carry = sum >> 1;
sum = sum % 2;
result += ('0' + sum);
}
while (i >= 0) {
sum = (s1[i--] - '0') + carry;
carry = sum >> 1;
sum = sum % 2;
result += ('0' + sum);
}
while (j >= 0) {
sum = (s2[j--] - '0') + carry;
carry = sum >> 1;
sum = sum % 2;
result += ('0' + sum);
}
if (carry != 0) {
result += ('0' + carry);
}
reverse(result.begin(), result.end());
return result;
}
};
int main() {
string s1, s2;
while(cin >> s1 >> s2) {
Solution st;
cout << st.addBinary(s1, s2) << endl;
}
return 0;
}