问题描述:
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
分析:首先让a成为二者间较长的字符串,然后从a和b的最后一个字符开始向前查找。当b已经不存在时,此时就只剩下a,如果此时carry为0时,那么整个过程结束。当a也结束时,且carry=1,那么只能再新分配数组了。
代码如下:0ms
char* addBinary(char* a, char* b) {
int aLen = strlen(a);
int bLen = strlen(b);
//make a the longer string
if(aLen<bLen){
char *tmp = a;
a = b;
b = tmp;
int tmpVal = aLen;
aLen = bLen;
bLen = tmpVal;
}
int aIndex = aLen-1;
int bIndex = bLen-1;
int carry = 0;
while(bIndex>=0||aIndex>=0){
int aVal = a[aIndex]-'0';
int bVal = 0;
if(bIndex>=0)
bVal = b[bIndex--]-'0';
int val = aVal+bVal+carry;
a[aIndex--] = val%2 + '0';
carry = val/2;
if(bIndex<0&&!carry)
return a;
}
if(!carry)
return a;
char *aa = (char *)malloc(sizeof(char)*(aLen+1));
aa[0] = '1';
strcpy(aa+1,a);
return aa;
}