[leetcode](Add Binary C语言实现)

Add Binary
Given two binary strings, return their sum (also a binary string).

For example,
a = “11”
b = “1”
Return “100”.
题意:求两个二进制字符串相加,并把结果保存为二进制字符串。
解题思路:动态申请一个数组用于保存相加后的二进制字符串,两个二进制相加有两种可能:
1. 111+11 = 1010 ,相加后长度+1,最高位存在进位
2. 1+1000=1001, 相加后长度没有变化,按照正常的二进制相加,该进位就进位。
注意事项:注意进位,注意字符转整型需要-‘0’ 整型转字符需要+‘0’, 申请的数组长度要=最长的字符串+1(这个1表示可能最高位存在进位)+1(这个1表示长度需要包括空字符 ‘\0’)。
实现C代码如下:

/**
 * 解题思路:另外申请一个数组用于保存相加后的二进制字符串,注意字转整型与整型转字符。注意二进制之间的进位。
 */
char *addBinary(char *a, char *b) {
    int i,j, temp,temp1,lenA,lenB,len;
    char *str;
    lenA = strlen(a);
    lenB = strlen(b);
    len = lenA>lenB?lenA:lenB;
    str= (char *)malloc((len+2)*sizeof(char));//申请的空间要大于最大的字符串长度加1+1,第一个1指字符串相加后可能进位,第二个1指字符串最后的'\0'结束字符
    memset(str,0,(len+2)*sizeof(char));
    j = len-1;temp  = 0;
    for(i=len;i >= 0 && lenA > 0 && lenB > 0; i--){
        *(str+i) = ((*(a+lenA-1)-'0') + (*(b+lenB-1)-'0') + temp)%2 + '0';
        temp = ((*(a+lenA-1)-'0') + (*(b+lenB-1)-'0') + temp)/2;
        lenA--;lenB--;
    }
    if(lenA == 0){//则对b字符串进行赋值给str
        for(; lenB > 0;i--){
            *(str+i) = ((*(b+lenB-1)-'0') +temp)%2 + '0';
            temp = ((*(b+lenB-1)-'0') +temp)/2;
            lenB--;
        }
    }else if(lenB == 0){//对a字符串进行赋值给str
        for(; lenA >0;i--){
            *(str+i) = ((*(a+lenA-1)-'0') + temp)%2+'0';
            temp = ((*(a+lenA-1)-'0') + temp)/2;
            lenA--;
        }
    }
    if(temp == 1) {*(str+i) = temp+'0';return str+i;}//若temp进位为1,则赋值给str
    return str+i+1;
}
阅读更多

没有更多推荐了,返回首页