Python程序:连接连续二进制数


假设我们有一个数字n,我们需要找到通过将1到n的二进制表示依次连接而成的二进制字符串的十进制值。如果结果太大,则返回结果模10^9 + 7。

例如,如果输入n = 4,则输出为220,因为将1到4的二进制表示连接起来的结果为 "1" + "10" + "11" + "100" = 11011100,这是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

更新于:2021年10月6日

440 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告