主要拿来练C语言语法,代码不是很好看
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) {
char *pa = a;
char *pb = b;
int a_len = 0;
int b_len = 0;
while(*pa != '\0'){
++pa;
++a_len;
}
while(*pb != '\0'){
++pb;
++b_len;
}
int ai,bi;
int len = (a_len>b_len?a_len:b_len)+2;
char *res = (char*)malloc(len*sizeof(char));
char carry_bit = '0';
res[len-1] = '\0';
int res_i = len-2;
--pa;
--pb;
for (ai = a_len,bi = b_len; ai > 0 && bi > 0; --ai,--bi,--pa, --pb){
res[res_i] = (( (*pa-'0') ^ (*pb-'0') ^ (carry_bit-'0') ) )+'0';
if(*pa == '0'){
carry_bit = ( (*pb-'0') & (carry_bit-'0') ) + '0';
}else{
carry_bit = ( (*pb-'0') || (carry_bit-'0') ) + '0';
}
--res_i;
}
while(ai>0){
res[res_i] = (( (*pa-'0') ^ (carry_bit-'0') ) )+'0';
carry_bit = ( (*pa-'0') & (carry_bit-'0')) + '0';
--res_i;
--ai;
--pa;
}
while(bi>0){
res[res_i] = (( (*pb-'0') ^ (carry_bit-'0') ) )+'0';
carry_bit = ( (*pb-'0') & (carry_bit-'0')) + '0';
--res_i;
--bi;
--pb;
}
if(carry_bit == '1'){
res[res_i] = carry_bit;
}else{
for(res_i = 1; res_i < len; ++res_i){
res[res_i-1] = res[res_i];
}
res[len-1] = '\0';
}
return res;
}