#刷题交流# 第12天:负二进制表示问题
负二进制的表示方法与普通二进制有所不同。在负二进制中,每一位的权值是 ((-2)^i),其中 (i) 是从右到左的位数索引(从0开始)。为了将一个整数 (n) 转换为负二进制表示,我们可以使用类似于普通二进制转换的方法,但需要注意处理负权值带来的影响。
转换步骤
1. 初始化:
○ 创建一个空字符串 result 用于存储结果。
○ 使用一个循环,直到 (n) 变为0。
2. 计算余数:
○ 计算 (n) 除以 -2 的余数 r。
○ 如果余数 r 为负数,则需要调整 (n) 和 r,使得 r 变为非负数。
3. 更新 (n):
○ 如果 r 为负数,将 (n) 增加1,同时将 r 加2,以确保 r 为非负数。
○ 将 r 转换为字符串并添加到 result 的前面。
4. 处理前导零:
○ 如果结果字符串为空,返回 "0"。
○ 否则,返回结果字符串。

核心代码:
while n != 0:
n, remainder = divmod(n, -2)
if remainder < 0:
n, remainder = n + 1, remainder + 2
result = str(remainder) + result

12天,加油加油,马上过半了!!!
展开
评论