- 二进制求和
void reserve(char* s) {
int len = strlen(s);
for(int i=0;i<len/2;i++){
char ch = s[i];
s[i] = s[len-i-1];
s[len-i-1]=ch;
}
}
char* addBinary(char* a, char* b) {
reserve(a);
reserve(b);
int len_max = fmax(strlen(a),strlen(b));
char* s = (char*)malloc((len_max+2)*sizeof(char));
int carry = 0;
int len = 0;
for(int i=0;i<len_max;i++){
carry += (i<strlen(a))?(a[i]=='1'):0;
carry += (i<strlen(b))?(b[i]=='1'):0;
s[len++] = carry%2 + '0';
carry /= 2;
}
if(carry){
s[len++] = '1';
}
s[len] = '\0';
reserve(s);
return s;
}
class Solution {
public:
string addBinary(string a, string b) {
string s;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int n = max(a.size(),b.size());
int carry = 0;
for(int i=0;i<n;i++){
carry += i<a.size()?(a.at(i)=='1'):0;
carry += i<b.size()?(b.at(i)=='1'):0;
s.push_back(carry%2+'0');
carry /= 2;
}
if(carry){
s.push_back('1');
}
reverse(s.begin(),s.end());
return s;
}
};