Trong bài toán này, chúng ta được cung cấp một số nguyên n. Nhiệm vụ của chúng ta là in số lớn nhất nhỏ hơn n có thể được tạo thành bằng cách thay đổi một bit đã đặt của biểu diễn nhị phân của số.
Hãy lấy một ví dụ để hiểu vấ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.
Để giải quyết vấn đề này, chúng ta sẽ phải lật bit đặt ngoài cùng bên phải và đặt nó bằng 0, điều này sẽ tạo ra số là số lớn nhất có thể nhỏ hơn n được tìm thấy bằng cách lật một bit của số.
Chương trình cho thấy việc triển khai giải pháp của chúng tôi,
Ví dụ
#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; }
Đầu ra
The number is 3452 The greatest integer smaller than the number is : 3448