用 Python 编写的查找连续二进制数连接的程序

pythonserver side programmingprogramming更新于 2025/12/2 2:52:17

假设我们有一个数字 n,我们必须通过按顺序逐一连接 1 到 n 的二进制表示来找到二进制字符串的十进制值,如果答案太大,则返回答案模 10^9 + 7。

因此,如果输入为 n = 4,则输出将为 220,因为通过连接 1 到 4 的二进制表示将是"1"+"10"+"11"+"100" = 110111000,这是 220 的二进制表示。

为了解决这个问题,我们将遵循以下步骤 −

  • ans := 1
  • m := 10^9+7
  • 对于 2 到 n 范围内的 i,执行
    • ans := 移位 ans(i 的位长度)次数
    • ans := (ans+i) mod m
  • 返回 ans

示例

让我们看看下面的实现以便更好地理解 −


def solve(n):
   ans = 1
   m = (10**9+7)
   for i in range(2,n+1):
      ans = ans<<i.bit_length()
      ans = (ans+i) % m
   return ans

n = 4
print(solve(n))

输入

4

输出

220

相关文章


有用资源