इस समस्या में, हमें एक अहस्ताक्षरित पूर्णांक n दिया जाता है। हमारा काम एक प्रोग्राम बनाना है जो उस नंबर को लौटाता है जो संख्या के सभी बिट्स को उलट कर उत्पन्न होता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
n = 1
आउटपुट
2147483648
स्पष्टीकरण
binary of 1 is 000...0001, the reverse is 100...0000.
इस समस्या को हल करने के लिए, हम सरल समाधान एक सरल सूत्र का उपयोग करेंगे। हम संख्या के बाइनरी के माध्यम से लूप करेंगे। और संख्या में सेट बिट की स्थिति का पता लगाएं, आइए इसे i कहें। परिणाम की गणना सूत्र का उपयोग करके की जाएगी, ((total_number_of_bits) - 1) - i
इस एल्गोरिथम के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
उदाहरण
#include<iostream> using namespace std; unsigned int reverseBitNumber(unsigned int num) { unsigned int totalNumberOfBits = sizeof(num) * 8; unsigned int reverseNumber = 0, temp; for (int i = 0; i < totalNumberOfBits; i++){ if((num & (1 << i))) reverseNumber |= (1 << ((totalNumberOfBits - 1) - i)); } return reverseNumber; } int main() { unsigned int n = 21; cout<<"The number is "<<n<<endl; cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n); return 0; }
आउटपुट
The number is 2 The number which has reverse bits of the number is :2818572288
विधि 2
एक और तरीका है शिफ्टिंग का उपयोग करना, हम संख्या के बिट्स को शून्य होने तक शिफ्ट करेंगे और उन्हें रिवर्स नंबर में शिफ्ट करेंगे और फिर परिणाम प्राप्त करने के लिए बिट्स को शेष संख्या में शिफ्ट करेंगे।
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
उदाहरण
#include<iostream> using namespace std; unsigned int reverseBitNumber(unsigned int n){ unsigned int rem_shift = sizeof(n) * 8 - 1; unsigned int reverseNubmer = n; n >>= 1; while(n){ reverseNubmer <<= 1; reverseNubmer |= n & 1; n >>= 1; rem_shift--; } reverseNubmer <<= rem_shift; return reverseNubmer; } int main(){ unsigned int n = 21; cout<<"The number is "<<n<<endl; cout<<"The number which has reverse bits of the number is :"<<reverseBitNumber(n); return 0; }
आउटपुट
The number is 21 The number which has reverse bits of the number is :2818572288