简单题:二进制反码转换问题
题目链接: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,变化后的数叫做二进制反码,最后返回二进制反码对应的十进制数。
思路分析
- 将给定的十进制数转换为二进制字符串,并去掉前缀
'0b'。 - 对二进制字符串进行反码操作,将每个
'0'变为'1',将每个'1'变为'0'。 - 将反码后的二进制字符串转换回十进制
具体代码步骤
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 的刷题功能可以帮助我们获得即时的思路提示和代码建议,特别适合在初学算法时使用。可以大幅提高刷题效率,加深知识点理解,帮助我们更快掌握算法技巧。