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
广告