मान लीजिए हमारे पास दो मान start और end हैं, हमें रेंज [start, end] (दोनों समावेशी) में सभी संख्याओं का बिटवाइज AND ढूंढना है।
इसलिए, यदि इनपुट है start = 8, end = 12, तो आउटपुट होगा 8 क्योंकि 8 बाइनरी में 1000 है और 12 1100 है, इसलिए 1000 AND 1001 AND 1010 AND 1011 AND 1100 है 1000 जो 8 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
n := end - start + 1x := 0bके लिए 31 से 0 तक, 1 से घटाते हुए, करें:- यदि
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