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