我的思路
先把俩补成一样长的,然后考虑当前位和进位
class Solution {
public:
string getCompensate(int val) {
string result = "";
while (val--) {
result += '0';
}
return result;
}
int chartoInt(char a) {
if (a == '1') return 1;
return 0;
}
char inttoChar(int a) {
if (a == 1) return '1';
return '0';
}
string addBinary(string a, string b) {
//!null
int tail_a = a.size() - 1, tail_b = b.size() - 1;
string compensate = "";
if (tail_a > tail_b) {
compensate = getCompensate(tail_a - tail_b);
b.insert(0, compensate);
}else if (tail_a < tail_b) {
compensate = getCompensate(tail_b - tail_a);
a.insert(0, compensate);
}
else;
int tail = (tail_a > tail_b) ? tail_a : tail_b;
int flag = 0, temp_result = 0;
while (tail >= 0) {
temp_result = chartoInt(a[tail]) + chartoInt(b[tail]) + flag;
if (temp_result == 2) {
flag = 1;
a[tail] = '0';
}else if(temp_result == 3){
flag = 1;
a[tail] = '1';
}else{
flag = 0;
a[tail] = inttoChar(temp_result);
}
--tail;
}
if (flag == 1) a.insert(0, "1");
return a;
}
};