67二进制求和

二进制求和

题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。
示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
解题思路:这一题刚开始就在考虑,C语言,返回数组的长度怎么来确定,然后借鉴了别人的做法,使用memcpy()字符串拷贝函数,大体思路和正常的十进制模拟计算一致,这题做的不是很好,有时间再做一遍。
char * addBinary(char * a, char * b){
    int len_a,len_b,len,jw,temp,max_size;
    len_a=strlen(a);
    len_b=strlen(b);
    max_size=(len_b>len_a)?(len_b+2):(len_a+2);
    char *result=(char *)malloc(sizeof(char)*max_size);
    result[max_size-1]='\0';
    len=max_size-2;
    jw=0;
    while(len_a||len_b||jw){
        temp=jw;
        if(len_a>=1){
            temp+=(a[len_a-1]-'0');
            len_a--;
        }
        if(len_b>=1){
            temp+=(b[len_b-1]-'0');
            len_b--;
        }
        jw=temp/2;
        result[len]='0'+(temp%2);
        len--;
    }
    if(len==0){
        char *temp_char=(char *)malloc(sizeof(char)*(max_size-1));
        memcpy(temp_char, result + 1, (max_size - 1) * sizeof(char));
        free(result);
        return temp_char;
    }
    return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值