[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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值