题目大意:给2个二进制字符串,求它们的和。
比如:a = "11"
b = "1"
返回 “100”
思路分析:模拟加法运算,用一个变量保存进位。
代码如下:
char* addBinary(char* a, char* b) {
int k, t, carry=0;
int alen = strlen(a);
int blen = strlen(b);
int len = alen > blen ? alen + 1 : blen + 1;
char * result = (char*)malloc(sizeof(char) * (len+1));
k = len;
result[k--] = '\0';
while(alen && blen) {
t = a[alen-1]-'0' + b[blen-1] - '0' + carry;
result[k--] = t%2 + '0';
carry = t/2;
alen--;
blen--;
}
if(alen==0) {
while(blen) {
t = b[blen-1] - '0' + carry;
result[k--] = t%2 + '0';
carry = t/2;
blen--;
}
}
if(blen==0) {
while(alen) {
t = a[alen-1] - '0' + carry;
result[k--] = t%2 + '0';
carry = t/2;
alen--;
}
}
result[k] = carry + '0';
if(carry) {
return result;
} else {
return result + 1;
}
}
不足之处:代码量有点多。有能简化的办法欢迎指出。