इस समस्या में, हमें एक नंबर N दिया जाता है। हमारा काम संख्या के सबसे दाहिने सेट बिट के इंडेक्स को प्रिंट करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट -4
आउटपुट -3
स्पष्टीकरण − 4 का बाइनरी 100 है, सबसे दाहिने सेट बिट का सूचकांक 3 है।
इस समस्या को हल करने के लिए, एक सरल समाधान यह होगा कि संख्या को तब तक स्थानांतरित किया जाए जब तक कि एक सेट बिट का सामना न हो जाए, लेकिन संख्या बड़ी होने पर इसमें बहुत अधिक गणना हो सकती है।
एक अधिक कुशल समाधान बूलियन बीजगणित का उपयोग करेगा। इसके लिए हम पहले संख्या के 2 के पूरक की गणना करेंगे, यह संख्या के सभी बिट्स को पहले सेट बिट को छोड़कर फ्लिप करेगा। फिर हम बिट-वार और संख्या की गणना करेंगे और यह 2 का पूरक है। इसके परिणामस्वरूप केवल एक सेट बिट और वह स्थिति होगी जो हम चाहते हैं। समाधान +1 नंबर के log2 द्वारा दिया जाएगा।
यह समझने में थोड़ा जटिल लगता है, आइए इस पद्धति का उपयोग करके एक उदाहरण को हल करें।
N= 10 , binary = 1010 2’s complement, 0101 1010 & 0101 = 0010 log2(2) = 1 1+1 = 2 which is the given index.
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
#include <iostream> #include <math.h> using namespace std; void rightSetBit(int N) { int bitIndex = log2(N & -N)+1; cout<<bitIndex; } int main() { int N = 10; cout<<"The rightmost Set bit of the number "<<N<<" is : "; rightSetBit(N); return 0; }
आउटपुट
The rightmost Set bit of the number 10 is : 2