Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
巧妙的算法:
char* addBinary(char* a, char* b) {
int n, m;
for (n=0; *a; a++, n++) ;
for (m=0; *b; b++, m++) ;
char *p = (char*)malloc(m>n ? m+2 : n+2);
char *last = p;
int c = 0;
while (n || m || c) {
int s = c;
if (n) {
s += *(--a)-'0';
--n;
}
if (m) {
s += *(--b)-'0';
--m;
}
*last++ = (s&1)+'0';
c = s>>1;
}
*last = '\0';
char *start = p, t;
while (start+1 < last) { // reverse string
t = *start;
*start++=*(--last);
*last=t;
}
return p;
}