- Related Questions & Answers
- Count set bits in an integer in C++
- C/C++ Program to Count set bits in an integer?
- Minimum number using set bits of a given number in C++
- Prime Number of Set Bits in Binary Representation in C++
- C/C++ Program to the Count set bits in an integer?
- Print numbers having first and last bits as the only set bits
- Binary representation of previous number in C++
- Maximum number of contiguous array elements with same number of set bits in C++
- Python program to reverse bits of a positive integer number?
- Java program to reverse bits of a positive integer number
- Java Program to Count set bits in an integer
- Python Program to Count set bits in an integer
- Check if a number has same number of set and unset bits in C++
- Prime Number of Set Bits in Binary Representation in Python
- C# program to count total set bits in a number

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

In this problem, we are given an integer n. Our task is to print the largest number less than n which can be formed by changing one set bit of the binary representation of the number.

Let’s take an example to understand the problem

Input: n = 3 Output: 2 Explanation: (3)10 = (011)2 Flipping one set bit gives 001 and 010. 010 is greater i.e. 2.

To solve this problem, we will have to flip the rightmost set bit and make it zero which will create the number the greatest possible number less than n that is found by flipping one bit of the number.

Program to show the implementation of our solution,

#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

Advertisements