二进制反码转换问题 | 豆包MarsCode AI刷题

114 阅读2分钟

简单题:二进制反码转换问题

题目链接:www.marscode.cn/practice...

题目描述:小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

题意分析

每个非负整数都有其二进制表示,给定一个十进制数字N,计算出他的二进制表示,把二进制表示里的每个1变为0,每个0变为1,变化后的数叫做二进制反码,最后返回二进制反码对应的十进制数。

思路分析

  1. 将给定的十进制数转换为二进制字符串,并去掉前缀 '0b'
  2. 对二进制字符串进行反码操作,将每个 '0' 变为 '1',将每个 '1' 变为 '0'
  3. 将反码后的二进制字符串转换回十进制

具体代码步骤

def solution(N: int) -> int:
    erjinzhi = bin(N)[2:]  # 去掉二进制的前缀0d
    fanma = ''.join('1' if i == '0' else '0' for i in erjinzhi)  # 对二进制数字进行反码
    print(fanma)
    shijinzhi = int(fanma, 2)  # 把二进制转为十进制
    return shijinzhi  # Placeholder return

关键步骤

  • bin(N)[2:]:将十进制数 N 转换为二进制字符串。
  • ''.join('1' if i == '0' else '0' for i in erjinzhi):对二进制字符串进行反码操作。
  • int(fanma, 2):将反码后的二进制字符串转换为十进制数,这还是我第一次知道int()有第二个参数。

知识总结:二进制操作与 int() 函数的多参数应用

在这道题的过程中,我学到了关于 int() 函数的第二个参数(进制)的用法。通常 int() 被用于整数转换,但 int(str, base) 能根据不同进制字符串的实际情况进行转换,比如 int("101", 2) 表示将“101”按二进制解析,得到整数 5。

在题解代码中,int(fanma, 2) 把反码后的二进制数直接转换成十进制,操作简单且有效。

工具运用

使用豆包MarsCode AI 的刷题功能可以帮助我们获得即时的思路提示和代码建议,特别适合在初学算法时使用。可以大幅提高刷题效率,加深知识点理解,帮助我们更快掌握算法技巧。