मान लीजिए कि हमारे पास दो संख्याएँ x और y हैं और एक दी गई श्रेणी (बाएँ, दाएँ) है। हमें यह जांचना है कि दी गई दोनों संख्याओं में बाएँ से दाएँ श्रेणी के सभी बिट एक-दूसरे के पूरक हैं या नहीं। हमें यह ध्यान रखना होगा कि दाएं से बाएं, इसलिए कम से कम महत्वपूर्ण बिट को पहले स्थान पर माना जाता है।
इसलिए, यदि इनपुट x =41 y =54 बाएँ =2 दाएँ =5 जैसा है, तो आउटपुट सही होगा, क्योंकि 41 और 54 के द्विआधारी प्रतिनिधित्व 101001 और 110110 हैं। x और y की सीमा 2 से 5 तक के बिट्स "1001" और "0110" हैं जो एक दूसरे के पूरक हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अस्थायी:=x XOR y
- जब टेम्परेचर की रेंज (बाएं, दाएं) के सभी बिट्स 1 हों तो सही लौटें, अन्यथा गलत
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def are_all_setbits_in_range(n, left, right): val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1) new_value = n & val if val == new_value: return True return False def solve(x, y, left, right): temp = x ^ y return are_all_setbits_in_range(temp, left, right) x = 41 y = 54 left = 2 right = 5 print(solve(x, y, left, right))
इनपुट
41, 54, 2, 5
आउटपुट
True