在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