इस समस्या में, हमें एक इंटीजर n दिया गया है। हमारा कार्य जांचना है कि पिछली संख्या संख्या के 1's कॉम्प्लीमेंट के बराबर है या नहीं।
हमारी समस्या को समझने के लिए कुछ उदाहरण लेते हैं
Input: 12 Output: No Explanation: (12)10 = (1100)2 पिछली संख्या 11 = (1011)2 12 का 1's कॉम्प्लीमेंट = (0011)2 Input: 4 Output: Yes Explanation: 4 = (100)2 पिछली संख्या 3 = (011)2 12 का 1's कॉम्प्लीमेंट = (011)2
इस समस्या को हल करने के लिए, हम एक सरल दृष्टिकोण का उपयोग कर सकते हैं जो पिछली संख्या और संख्या के 1's कॉम्प्लीमेंट की तुलना करना है।
यह दृष्टिकोण सरल है लेकिन स्पेस और समय खपत करता है। समय जटिलता: O(n)
एक प्रभावी समाधाय सामान्य विधि का उपयोग करना हो सकता है जिसे हम समस्या को हल करने के लिए खोजते हैं। यहां, केवल 2 की घात वाली संख्याएं ही शर्त को संतुष्ट करेंगी यानी पिछली संख्या 1's कॉम्प्लीमेंट के बराबर है।
हमारे समाधान के कार्यान्वयन को दिखाने वाला प्रोग्राम
उदाहरण
#include <iostream> using namespace std; bool sameBits(unsigned long int n){ if ((n & (n - 1)) == 0) return true; return false; } int main(){ unsigned long int n = 64; if(sameBits(n)) cout<<"Both are the same"; else cout<<"Both aren't the same"; return 0; }आउटपुट
Both are the same