इस समस्या में, हमें एक अनसाइन्ड पूर्णांक n दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो उस संख्या को लौटाता है जो संख्या के सभी बिट्स को उलटने से उत्पन्न होती है।
आइए एक उदाहरण से समस्या को समझते हैं,
इनपुट
n = 1
आउटपुट
2147483648
व्याख्या
1 का बाइनरी 000...0001 है, उलटा 100...0000 है।
इस समस्या को हल करने के लिए, एक सरल समाधान एक साधारण सूत्र का उपयोग करना होगा। हम संख्या के बाइनरी के माध्यम से लूप करेंगे। और संख्या में सेट बिट की स्थिति ढूंढेंगे मान लीजिए वह i है। परिणाम की गणना सूत्र का उपयोग करके की जाएगी, ((कुल_बिट्स_की_संख्या) - 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 21 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