在Python中找到给定范围内一组数字的按位与
假设我们有两个值start和end,我们必须找到范围[start,end](包括两个端点)内所有数字的按位AND操作结果。
所以,如果输入是start = 8,end = 12,那么输出将是8在二进制中是1000,12在二进制中是1100,因此1000 AND 1001 AND 1010 AND 1011 AND 1100是1000,即8。
要解决此问题,我们将执行以下步骤:
- n:= end – start + 1
- x:= 0
- for b in range 31 to 0, decrease by 1, do
- 如果2 ^ b < n,则
- 从循环中退出
- 如果 2 ^ b AND start AND end 非零,则
- x:= x +(2^b)
- 如果2 ^ b < n,则
- return x
例子
让我们看以下实现以更好地理解-
def solve(start, end):
n = end - start + 1
x = 0
for b in range(31, -1, -1):
if (1 << b) < n:
break
if (1 << b) & start & end:
x += 1 << b
return x
start = 8
end = 12
print(solve(start, end))
输入
8, 12
输出
8