题库二进制之和解析 | 豆包MarsCode AI刷题

125 阅读3分钟

问题解析

在现代计算中,二进制数字的处理是基础而重要的,尤其在计算机科学和数字电路设计中更是如此。在本问题中,我们需要将两个可能非常长的二进制字符串相加,并以十进制形式输出结果。由于这些字符串可能超出常规整数的表示范围,使用传统的加法方式可能无法解决问题,因此我们需要设计一个高效的算法。

输入与输出

  • 输入:两个二进制字符串,例如 "1101""1011"
  • 输出:这两个字符串相加后的十进制结果,例如将 "1101"(对应十进制的13)与 "1011"(对应十进制的11)相加,得到的结果是12

算法思路

  1. 逐位相加

    • 二进制加法遵循基础的加法规则:0 + 0 = 00 + 1 = 11 + 0 = 11 + 1 = 0,并产生进位。通过这些简单的规则,我们可以逐位进行加法。
  2. 从右向左处理

    • 为了实现逐位相加,我们可以从两个字符串的末尾开始处理,逐位向前移动,同时考虑进位的影响。
  3. 处理进位

    • 在每一步的加法中,如果当前位的和大于等于 2,我们就需要将进位传递到下一位。例如,1 + 1 = 0,进位为 1。因此,我们需要在下一次加法中加入这个进位。
  4. 边界处理

    • 如果其中一个字符串的长度不足,我们需要将缺失部分视为 0 进行计算。例如,如果 bin_str1 的长度为 5,bin_str2 的长度为 3,我们需要在 bin_str2 前面补零来对齐它们。
  5. 结果转换

    • 当所有位都加完后,我们会得到一个新的二进制字符串。这个结果可以使用 Python 的内置功能,直接转换为十进制数字。

示例过程

以二进制字符串 "1101""1011" 为例:

  1. 从末尾开始相加:

    • 最右位:1 + 1 = 0,进位为 1
    • 第二位:0 + 1 + 1(进位) = 0,进位为 1
    • 第三位:1 + 0 + 1(进位) = 0,进位为 1
    • 最左位:1 + 1 + 1(进位) = 1,进位为 1
  2. 结果为 11000(二进制),即在最后一位还有进位。

  3. 11000 转换为十进制,得到 12

示例代码

def solution(binary1, binary2):
    # 将二进制字符串转换为十进制
    decimal_sum = int(binary1, 2) + int(binary2, 2)
    
    # 返回十进制字符串
    return str(decimal_sum)
if __name__ == "__main__":
    #  You can add more test cases here
    print(solution("101", "110") == "11")
    print(solution("111111", "10100") == "83")
    print(solution("111010101001001011", "100010101001") == "242420")
    print(solution("111010101001011", "10010101001") == "31220")