1.题目
Given two binary strings a
and b
, return their sum as a binary string.
Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
2.思路
之前想的是先转成十进制再计算了转换回去,但是发现再c++里面很难实现
采取和66一样的做法,设置一个进位标志位来进行计算,同时从最右边开始进行计算
3.代码
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string addBinary(string a, string b) {
string result;
int carry = 0; //进位标志位
int i = a.size() - 1;
int j = b.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) {
sum += a[i] - '0';
i--;
} /* 将字符转换为数字。在ASCII编码中,字符 '0' 对应的是数字 48,字符 '1' 对应的是数字 49,以此类推。
因此,通过将字符减去 '0',我们可以得到对应的数字值,例如 '0' 变成 0,'1' 变成 1,以此类推*/
if (j >= 0) {
sum += b[j] - '0';
j--;
}
result = to_string(sum % 2) + result; //将字符串形式的二进制值添加到结果字符串 result 的最前面
//sum %2 得到当前的二进制的值
carry = sum / 2;
//得到进位的值
}
return result;
}
};
int main() {
Solution solution;
string a = "1010";
string b = "1011";
string sum = solution.addBinary(a, b);
cout << "Sum: " << sum << endl;
return 0;
}
4.总结
1.比如说二进制 %2 代表当前位二进制的值 /2代表它的进位值
十进制 %10 代表了当前位的十进制的值 /10代表了当前的进位值
2.这里的字符‘0’对应的ascii编码为48 ,这里的a[i] - '0' 得到当前对应的数字值
3. to_string(), 将字符串形式的二进制值添加到结果字符串的最前面