Remove one bit from a binary number to get maximum value

Given a binary number, the task is to remove exactly one bit from it such that, after it’s removal, the resultant binary number is greatest from all the options.

Examples:

Input: 110
Output: 11
    As 110 = 6 in decimal, 
    the option is to remove either 0 or 1.
    So the possible combinations are 10, 11
    The max number is 11 = 3 in decimal.  

Input:1001
Output: 101

Approach:



  1. Traverse the binary number from left to right.
  2. Find the least redundant 0 bit, as this bit will have the least effect on the resultant binary number.
  3. Skip this bit, or remove it.
  4. The rest of the bits give the maximum value binary number.

Below is the implementation of the above approach:

Program:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find next maximum binary number
// with one bit removed
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to find the maximum binary number
int printMaxAfterRemoval(string s)
{
    bool flag = false;
    int n = s.length();
  
    // Traverse the binary number
    for (int i = 0; i < n; i++) {
  
        // Try finding a 0 and skip it
        if (s[i] == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            cout << s[i];
    }
}
  
// Driver code
int main()
{
  
    // Get the binary number
    string s = "1001";
  
    // Find the maximum binary number
    printMaxAfterRemoval(s);
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find next maximum binary number
// with one bit removed
  
import java.io.*;
  
class GFG {
   
// Function to find the maximum binary number
static int printMaxAfterRemoval(String s)
{
    boolean flag = false;
    int n = s.length();
  
    // Traverse the binary number
    for (int i = 0; i < n; i++) {
  
        // Try finding a 0 and skip it
        if (s.charAt(i) == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            System.out.print( s.charAt(i));
    }
  return 0;
}
  
// Driver code
    public static void main (String[] args) {
            // Get the binary number
    String s = "1001";
  
    // Find the maximum binary number
    printMaxAfterRemoval(s);
    }
}
// This code is contributed by anuj_67..

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find next maximum  
# binary number with one bit removed 
  
# Function to find the maximum
# binary number 
def printMaxAfterRemoval(s): 
  
    flag = False
    n = len(s) 
  
    # Traverse the binary number 
    for i in range(0, n): 
  
        # Try finding a 0 and skip it 
        if s[i] == '0' and flag == False
            flag = True
            continue
          
        else:
            print(s[i], end = "") 
  
# Driver code 
if __name__ == "__main__":
  
    # Get the binary number 
    s = "1001"
  
    # Find the maximum binary number 
    printMaxAfterRemoval(s) 
  
# This code is contributed 
# by Rituraj Jain

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find next maximum 
// binary number with one bit removed
using System;
  
class GFG 
{
// Function to find the maximum
// binary number
static int printMaxAfterRemoval(String s)
{
    bool flag = false;
    int n = s.Length;
  
    // Traverse the binary number
    for (int i = 0; i < n; i++)
    {
  
        // Try finding a 0 and skip it
        if (s[i] == '0' && flag == false)
        {
            flag = true;
            continue;
        }
        else
            Console.Write(s[i]);
    }
    return 0;
}
  
  
// Driver Code
static void Main()
{
    // Get the binary number
    String s = "1001";
      
    // Find the maximum binary number
    printMaxAfterRemoval(s);
}
}
  
// This code is contributed by Ryuga.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find next maximum 
// binary number with one bit removed
  
// Function to find the maximum
// binary number
function printMaxAfterRemoval($s)
{
    $flag = false;
    $n = strlen($s);
  
    // Traverse the binary number
    for ($i = 0; $i < $n; $i++) 
    {
  
        // Try finding a 0 and skip it
        if ($s[$i] == '0' && $flag == false) 
        {
            $flag = true;
            continue;
        }
        else
            echo $s[$i];
    }
}
  
// Driver code
  
// Get the binary number
$s = "1001";
  
// Find the maximum binary number
printMaxAfterRemoval($s);
  
// This code is contributed 
// by Akanksha Rai
?>

chevron_right


Output:

101

Time Complexity: O(n)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.