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