इस समस्या में, हमें दो धनात्मक पूर्णांक N और M दिए गए हैं। हमारा कार्य उस दाएं सबसे बिट को प्रिंट करना है जो N और M के योग के बाइनरी जोड़ में पहला कैरी बिट उत्पन्न करता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट - N = 5, M = 14
आउटपुट - 3
व्याख्या -
(5)2 = 0101 , (14)2 = 1110 योग 0101 + 1110 10011
इस समस्या को हल करने के लिए, हम बूलियन बीजगणित से कुछ अवलोकनों पर विचार करेंगे।
योग तब कैरी उत्पन्न करेगा जब दोनों संख्याएं 1 होंगी। इसलिए, हम उन सभी बिट्स को ढूंढेंगे जहां कैरी उत्पन्न होती है। यह दोनों संख्याओं के AND ऑपरेशन को ढूंढकर किया जाएगा। और फिर उस संख्या का दाएं सबसे बिट ढूंढेंगे।
यह समझने में थोड़ा जटिल लगता है, आइए इस विधि का उपयोग करके एक उदाहरण हल करें।
N = 5 और 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 << "संख्या " << N << " और " << M << " के योग में कैरी उत्पन्न करने वाले दाएं सबसे बिट की स्थिति है ";
rightCarryBit(N, M);
return 0;
}
आउटपुट
संख्या 4 और 14 के योग में कैरी उत्पन्न करने वाले दाएं सबसे बिट की स्थिति है 3