首页 > 试题广场 >

二进制求和

[编程题]二进制求和
  • 热度指数:2165 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个用字符串表示的二进制数,返回他们的和。

数据范围:字符串长度满足 ,字符串中只含有 0 和 1,且保证除 0 以外的二进制数没有前导零的情况。
示例1

输入

"101","1"

输出

"110"
示例2

输入

"0","1"

输出

"1"
示例3

输入

"1","1"

输出

"10"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param A string字符串 
 * @param B string字符串 
 * @return string字符串
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
char* binaryAdd(char* A, char* B ) {
    // write code here
    int sum = 0;
    int aLen = strlen(A);
    int bLen = strlen(B);
    int restNumsLen = 0;
    
    char *p = NULL;
    char *restNums = NULL;
    
    restNumsLen = aLen > bLen ? (aLen + 1) : (bLen + 1);
    restNums = (char *)malloc(sizeof(char) * (restNumsLen + 1));
    restNums[restNumsLen--] = '\0';
    
    while ((aLen > 0) || (bLen > 0)) {
        if (aLen > 0) {
            sum += (A[--aLen] - '0');
        }
        if (bLen > 0) {
            sum += (B[--bLen] - '0');
        }
        restNums[restNumsLen--] = (sum % 2) + '0';
        sum = sum / 2;
    }
    if (sum != 0) {
        restNums[restNumsLen] = sum + '0';
        p = restNums;
    } else {
        p = &restNums[1];
    }
    
    return p;
}
发表于 2022-05-30 23:58:38 回复(0)

问题信息

难度:
2条回答 3077浏览

热门推荐

通过挑战的用户

查看代码