题解-二进制反码的十进制表示

100 阅读3分钟

题解:二进制反码的十进制表示

问题描述

小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制“101”,整数 11 可以被表示为二进制“1011”,并且除了 N = 0 外,任何二进制表示中都不会简单零。

二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数“101”的二进制反码为“010”。现在小C想知道,给定一个十进制数 N,它的二进制反码对应的十进制数是多少。

测试样例

  • 样例1
    • 输入:N = 5
    • 输出:2
  • 样例2
    • 输入:N = 10
    • 输出:5
  • 样例3
    • 输入:N = 0
    • 输出:1

解题思路

  1. 二进制表示:首先,我们需要将给定的十进制数 N 转换为二进制表示。Python 提供了内置函数 bin() 来完成这个任务。bin(N) 返回一个以 0b 开头的字符串,表示 N 的二进制形式。
  2. 反码计算:接下来,我们需要计算二进制数的反码。反码的计算可以通过遍历二进制字符串,将每个 1 变为 0,每个 0 变为 1 来实现。
  3. 转换为十进制:最后,将反码的二进制字符串转换回十进制数。Python 提供了内置函数 int(binary_string, 2) 来完成这个任务,其中 binary_string 是二进制字符串,2 表示基数为 2。

代码实现

def solution(N: int) -> int:
    if N == 0:
        return 1
    
    # 将十进制数转换为二进制字符串
    binary_str = bin(N)[2:]
    
    # 计算反码
    inverse_binary_str = ''.join('1' if bit == '0' else '0' for bit in binary_str)
    
    # 将反码的二进制字符串转换为十进制数
    inverse_decimal = int(inverse_binary_str, 2)
    
    return inverse_decimal

# 测试样例
print(solution(5))  # 输出:2
print(solution(10)) # 输出:5
print(solution(0))  # 输出:1

代码解析

特殊情况处理:

如果输入的 N 为 0,直接返回 1。因为 0 的二进制表示为 0,其反码为 1,对应的十进制数为 1。

if N == 0:
    return 1

二进制转换:

使用 bin(N)[2:] 将十进制数 N 转换为二进制字符串,并去掉前缀 0b

python
复制代码
binary_str = bin(N)[2:]

反码计算:

使用列表推导式遍历二进制字符串,将每个 1 变为 0,每个 0 变为 1,并拼接成新的反码字符串。

python
复制代码
inverse_binary_str = ''.join('1' if bit == '0' else '0' for bit in binary_str)

十进制转换:

使用 int(inverse_binary_str, 2) 将反码的二进制字符串转换为十进制数。

python
复制代码
inverse_decimal = int(inverse_binary_str, 2)

复杂度分析

  • 时间复杂度:O(log N),其中 N 是输入的十进制数。时间复杂度主要取决于二进制字符串的长度,而二进制字符串的长度与 N 的位数成正比,即 log N。
  • 空间复杂度:O(log N),主要的空间开销在于存储二进制字符串和反码字符串。

总结

本题的核心在于如何将十进制数转换为二进制表示,计算其反码,并将反码转换回十进制数。通过 Python 的内置函数 bin() 和 int(),可以高效地完成这些任务。最终的代码简洁明了,易于理解和维护。