在Python中找到连续二进制数的串联

在Python中找到连续二进制数的串联

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

所以,如果输入是n = 4,那么输出将是220,因为将1到4的二进制表示连接起来将是”1″ + “10” + “11” + “100” = 110111000,这是220的二进制表示。

要解决这个问题,我们将按照以下步骤进行-

  • ans := 1
  • m := 10^9+7
  • for i in range 2 to n, do
    • ans := 移位 ans (i 的位长度) 次
    • ans := (ans+i) mod m
  • return 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程