इस समस्या में, हमें दो संख्याएं M और N दी गई हैं। हमारा कार्य दोनों संख्याओं के दाएं सबसे सामान्य बिट की स्थिति (इंडेक्स) प्रिंट करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट - N = 4, M = 7
आउटपुट - 3
व्याख्या - (4)2 = 100, (7)2 = 111। दाएं सबसे सामान्य बिट इंडेक्स 3 पर है।
इस समस्या को हल करने के लिए, हमें दोनों संख्याओं के सभी समान बिट्स ढूंढने होंगे। सभी समान बिट्स ढूंढने के लिए हम M और N का XOR ढूंढेंगे। फिर हम M^N के नेगेशन में दाएं सबसे बिट ढूंढेंगे।
यह समझने में थोड़ा जटिल लगता है, आइए इस विधि का उपयोग करके एक उदाहरण हल करें।
N = 4, M = 7 ~N^M = 100।
यहां दाएं सबसे सेट बिट इंडेक्स 3 पर है।
उदाहरण
हमारे समाधान के कार्यान्वयन को दर्शाने वाला प्रोग्राम,
#include <iostream>
#include <math.h>
using namespace std;
int rightSetBit(int N) {
int bitIndex = log2(N & -N) + 1;
return bitIndex;
}
void rightSameBit(int m, int n) {
int diffBit = rightSetBit(~(m^n));
cout << diffBit;
}
int main() {
int N = 4, M = 7;
cout << "संख्या " << N << " & " << M << " के पहले दाएं समान बिट की स्थिति है ";
rightSameBit(N, M);
return 0;
}
आउटपुट
संख्या 4 & 7 के पहले दाएं समान बिट की स्थिति है 3