负二进制表达问题 | 豆包MarsCode AI刷题

53 阅读2分钟

题目如图: image.png 要解决将整数 nn 转换为负二进制表示的问题,我们需要理解负二进制的基本原理。在负二进制中,数位的权值是 (−2)^i 而不是通常的二进制中的 2^i。

算法步骤详解

  1. 初始化

    • 从整数 n 开始,准备一个空字符串来存储负二进制表示。这个字符串将用于累积每次迭代得到的余数,从而构建最终的负二进制表示。
  2. 迭代过程

    • 只要 n 不为 0,重复以下步骤:

      • 计算余数:计算 n 除以 -2 的余数。这个余数将是当前数位的值,可能是 0、1 或 -1。
      • 添加到字符串:将余数转换为字符串并添加到结果字符串的开头。这是因为我们是从最低有效位(即最右边的位)开始处理的,所以每次得到的余数都应该放在结果字符串的最前面。
      • 更新 nn:更新 n 为 n 除以 -2 的商。这样,我们就将问题规模缩小,准备进行下一次迭代。
  3. 特殊情况处理

    • 如果 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

这段代码遵循了上述算法步骤,通过迭代地计算余数和商,从最低有效位开始构建负二进制表示。