इस समस्या में, हमें दो धनात्मक पूर्णांक N और M दिए गए हैं। हमारा कार्य सबसे दाहिने बिट को प्रिंट करना है जो N और M के योग के बाइनरी जोड़ में पहला कैरी बिट उत्पन्न करता है। ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट - एन =5, एम =14
आउटपुट -3
स्पष्टीकरण -
(5)2 = 0101 , (14)2 = 1110 Sum 0101 + 1110 10011
इस समस्या को हल करने के लिए, हम बूलियन बीजगणित के कुछ अवलोकनों पर विचार करेंगे।
जब दोनों संख्याएं 1 होंगी तो योग एक कैरी उत्पन्न करेगा। तो, हम सभी बिट्स पाएंगे जहां कैरी उत्पन्न होता है। यह दोनों संख्याओं का पता लगाकर और उनकी संक्रिया को ज्ञात करके किया जाएगा। और संख्या का सबसे दाहिना भाग ज्ञात करें।
यह समझने में थोड़ा जटिल लगता है, आइए इस पद्धति का उपयोग करके एक उदाहरण को हल करें।
N = 5 and M = 14 N&M = 0100
यहां सबसे दाहिना सेट बिट इंडेक्स 3 पर है।
उदाहरण
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
#include <iostream> #include <math.h> using namespace std; int rightSetBit(int N) { int bitIndex = log2(N & -N)+1; return bitIndex; } void rightCarryBit(int N, int M) { int carryIndex = rightSetBit(N & M); cout<<carryIndex; } int main() { int N=4, M=14; cout<<"The position of rightmost bit that generates carry in the sum of "<<N<<" and "<<M<<" is "; rightCarryBit(N,M); return 0; }
आउटपुट
The position of rightmost bit that generates carry in the sum of 4 and 14 is 3