题目如图:
要解决将整数 nn 转换为负二进制表示的问题,我们需要理解负二进制的基本原理。在负二进制中,数位的权值是 (−2)^i 而不是通常的二进制中的 2^i。
算法步骤详解
-
初始化:
- 从整数 n 开始,准备一个空字符串来存储负二进制表示。这个字符串将用于累积每次迭代得到的余数,从而构建最终的负二进制表示。
-
迭代过程:
-
只要 n 不为 0,重复以下步骤:
- 计算余数:计算 n 除以 -2 的余数。这个余数将是当前数位的值,可能是 0、1 或 -1。
- 添加到字符串:将余数转换为字符串并添加到结果字符串的开头。这是因为我们是从最低有效位(即最右边的位)开始处理的,所以每次得到的余数都应该放在结果字符串的最前面。
- 更新 nn:更新 n 为 n 除以 -2 的商。这样,我们就将问题规模缩小,准备进行下一次迭代。
-
-
特殊情况处理:
- 如果 n 为 0,直接返回 "0"。这是因为任何数的负二进制表示如果为 0,那么结果就是 "0"。
示例分析
样例 1:n=2
-
步骤 1:2÷(−2)=−1 余数是 0,所以字符串变为 "0"。
- 这里,2 除以 -2 的商是 -1,余数是 0。我们将余数 0 添加到字符串的开头。
-
步骤 2:−1÷(−2)=0余数 −1,所以字符串变为 "-10"。
- 接下来,-1 除以 -2 的商是 0,余数是 -1。我们将余数 -1(在字符串中表示为 "1",因为负二进制中用 1 表示 -1)添加到字符串的开头。
-
步骤 3:由于 n 现在为 0,停止迭代。
- 最终结果字符串是 "110"。
样例 2:n=3
- 步骤 1:3÷(−2)=−13÷(−2)=−1 余数 11,所以字符串变为 "1"。
- 步骤 2:−1÷(−2)=0−1÷(−2)=0 余数 −1−1,所以字符串变为 "-11"。
- 步骤 3:由于 n 现在为 0,停止迭代。
- 结果:字符串是 "111"。
样例 3:n=0
- 由于 n 为 0,直接返回 "0"。
代码实现
以下是将整数转换为负二进制表示的 Python 代码:
python
def toNegativeBase2(n):
if n == 0:
return "0"
result = ""
while n != 0:
remainder = n % -2
n = n // -2
result = str(remainder) + result
return result
# 测试样例
print(toNegativeBase2(2)) # 输出:110
print(toNegativeBase2(3)) # 输出:111
print(toNegativeBase2(0)) # 输出:0
这段代码遵循了上述算法步骤,通过迭代地计算余数和商,从最低有效位开始构建负二进制表示。