इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा काम n से कम सबसे बड़ी संख्या को प्रिंट करना है जिसे संख्या के द्विआधारी प्रतिनिधित्व के एक सेट बिट को बदलकर बनाया जा सकता है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं
Input: n = 3 Output: 2 Explanation: (3)10 = (011)2 Flipping one set bit gives 001 and 010. 010 is greater i.e. 2.
इस समस्या को हल करने के लिए, हमें सबसे दाहिने सेट बिट को फ़्लिप करना होगा और इसे शून्य करना होगा जो कि संख्या के एक बिट को फ़्लिप करने से प्राप्त होने वाली संख्या को n से कम की सबसे बड़ी संभव संख्या बना देगा।
हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,
उदाहरण
#include<iostream> #include<math.h> using namespace std; int returnRightSetBit(int n) { return log2(n & -n) + 1; } void previousSmallerInteger(int n) { int rightBit = returnRightSetBit(n); cout<<(n&~(1<<(rightBit - 1))); } int main() { int n = 3452; cout<<"The number is "<<n<<"\nThe greatest integer smaller than the number is : "; previousSmallerInteger(n); return 0; }
आउटपुट
The number is 3452 The greatest integer smaller than the number is : 3448