สมมติว่าเรามีค่า start และ end เราต้องหา Bitwise AND ของตัวเลขทั้งหมดในช่วง [start, end] (รวมทั้งสองข้าง)
เช่น ถ้าอินพุตคือ start = 8, end = 12 ผลลัพธ์จะเป็น 8 เพราะ 8 คือ 1000 ในไบนารี และ 12 คือ 1100 ดังนั้น 1000 AND 1001 AND 1010 AND 1011 AND 1100 = 1000 ซึ่งคือ 8
ขั้นตอนการแก้ปัญหา
n := end - start + 1x := 0- สำหรับ
bในช่วง31ลงถึง0:- ถ้า
2^b < nออกจากลูป - ถ้า
2^b AND start AND endไม่เป็นศูนย์ ให้x := x + (2^b)
- ถ้า
- คืนค่า
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