67二进制求和

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dreamLC1998/article/details/102751103

二进制求和

题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 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;
}

猜你喜欢

转载自blog.csdn.net/dreamLC1998/article/details/102751103