- Related Questions & Answers
- Next greater integer having one more number of set bits in C++
- Largest number less than X having at most K set bits in C++
- Count set bits in an integer in C++
- Number of integers with odd number of set bits in C++
- C/C++ Program to Count set bits in an integer?
- Minimum number using set bits of a given number in C++
- Next higher number with same number of set bits in C++
- C/C++ Program to the Count set bits in an integer?
- Prime Number of Set Bits in Binary Representation in C++
- Print numbers having first and last bits as the only set bits
- Count of divisors having more set bits than quotient on dividing N in C++
- Binary representation of previous number in C++
- Largest smaller number possible using only one swap operation in C++
- Maximum number of contiguous array elements with same number of set bits in C++
- Java Program to Count set bits in an integer

- 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