伴学笔记 AI刷题 55. 二进制之和| 豆包MarsCod

127 阅读5分钟

二进制字符串可能非常长,普通的整数运算方法可能会超出时间限制或遇到溢出问题,所以需要设计一种方法既能正确处理大数,又能在合理的时间复杂度内完成。

二进制字符串可以通过Python的内建函数 int() 来转换为十进制整数。例如int("101", 2) 会返回 5,即 "101" 是二进制表示的数字5。将两个二进制字符串转换为十进制整数后,我们可以直接进行相加操作。最后,我们需要将结果转换回字符串形式,并返回。转换二进制字符串为十进制整数的时间复杂度是O(n),其中 n 是字符串的长度。二进制加法的时间复杂度是O(n),因为我们做的是加法操作。因此,整体的时间复杂度是O(n)。将 binary1 和 binary2 转换为十进制整数。对这两个整数进行加法操作,将结果转换为字符串并返回。

def solution(binary1, binary2):

    num1 = int(binary1, 2)
    num2 = int(binary2, 2)

    # 进行加法操作
    result = num1 + num2

    # 返回结果的字符串形式
    return str(result)
    复制代码

Python 提供了非常简便的方式来进行 十进制和二进制之间的转换

  • 使用 bin() 可以将十进制转换为二进制,结果会以 '0b' 开头。
  • 使用 int() 可以将二进制字符串转换为十进制整数,指定 base=2 即可。
  • 使用 format() 和 f-string 也可以进行进制转换,提供了更加灵活和简洁的方式。

这些方法不仅可以帮助我们在编程时进行数值的表示和转换,还能帮助我们理解计算机是如何处理数据和进行运算的。

Python 提供了 bin() 函数来将一个十进制整数转换为二进制字符串。

语法

bin(x)
  • x 是待转换的十进制整数。

返回值

  • 返回一个以 '0b' 开头的二进制字符串。

示例

# 十进制转换为二进制
decimal_number = 10
binary_string = bin(decimal_number)
print(binary_string)  # 输出:'0b1010'
  • 输出结果 '0b1010' 表示 10 的二进制表示是 1010,前缀 '0b' 表示这是一个二进制数。

去掉 '0b' 前缀

如果我们只关心二进制的部分,可以通过切片来去掉 '0b' 前缀。

示例

binary_string = bin(10)[2:]
print(binary_string)  # 输出:'1010'

二进制到十进制的转换

将二进制数转换为十进制数其实是将二进制的每一位按从右到左的位置加权,分别乘以对应的 2 的幂次,然后将结果加起来。

使用 int() 函数

Python 提供了 int() 函数,可以用它将一个二进制字符串(或其他进制的字符串)转换为十进制整数。

语法

int(x, base)
  • x 是待转换的字符串,表示一个数。
  • base 是 x 所在的进制,对于二进制来说,base=2

返回值

  • 返回该数在十进制下的表示。

示例

# 二进制转换为十进制
binary_string = "1010"
decimal_number = int(binary_string, 2)
print(decimal_number)  # 输出:10

在上面的例子中,"1010" 是一个二进制字符串,表示十进制的 10。

对于负数,二进制和十进制的转换需要使用补码表示。在 Python 中,bin() 函数和 int() 函数本身就能处理负数的转换。补码是计算机中表示负数的一种方法。

十进制负数转二进制

Python 的 bin() 对负数直接给出二进制补码表示,带有负号:

decimal = -11
binary_str = bin(decimal)  # 输出 '-0b1011'
print(binary_str)

二进制负数转十进制

对于二进制的负数,可以通过 int() 函数来直接转换:

binary_str = "-1011"
decimal = int(binary_str, 2)
print(decimal)  # 输出 -11

固定长度的二进制表示

如果我们需要将一个数转为固定长度的二进制表示(例如,8 位、16 位等),可以使用字符串的 zfill() 方法来进行补零,确保二进制数达到指定长度。

decimal = 11
binary_str = bin(decimal)[2:].zfill(8)  # 固定为 8 位二进制
print(binary_str)  # 输出 '00001011'

处理任意进制转换(进制之间转换)

除了二进制和十进制,Python 也支持任意进制之间的转换。例如,将一个二进制数转换为八进制或十六进制。

binary_str = "1011"
octal_str = oct(int(binary_str, 2))[2:]  # 先转换为十进制,再转换为八进制
print(octal_str)  # 输出 '13'

从二进制到十六进制

binary_str = "1011"
hex_str = hex(int(binary_str, 2))[2:]  # 先转换为十进制,再转换为十六进制
print(hex_str)  # 输出 'b'

总结

  • 内置方法

    • int(binary_str, 2):二进制字符串转十进制。
    • bin(decimal):十进制转二进制。
    • oct(decimal) 和 hex(decimal):十进制转八进制和十六进制。
  • 手动实现:通过除法和余数,可以手动实现进制转换。

  • 负数和补码:Python 中负数转换为二进制时自动使用补码表示。你可以通过 bin() 和 int() 处理负数的进制转换。

  • 固定长度表示:使用 zfill() 可以保证二进制字符串有固定长度。

  • 进制间转换:通过将一个进制数转换为十进制后,再转换为另一个进制。

这些方法和技巧提供了灵活的工具来进行二进制与十进制的转换,可以根据需要选择最适合的方式。