Binary representation of next number

Given a binary input that represents binary representation of positive number n, find binary representation of n+1.

The binary input may be and may not fit even in unsigned long long int.

Examples:



Input : 10011
Output : 10100
Here n = (19)10 = (10011)2
next greater integer = (20)10 = (10100)2 

Input : 111011101001111111
Output : 111011101010000000 

We store input as string so that large numbers can be handled. We traverse the string from rightmost character and convert all 1s to 0s until we find a 0. Finally convert the found 0 to 1. If we do not find a 0, we append a 1 to overall string.

string nextGreater(num)
  l = num.length

  // Find first 0 from right side. While
  // searching, convert 1s to 0s
  for i = l-1 to 0
    if num[i] == '0'
       num[i] = '1'
       break
    else
       num[i] = '0'
         
  // If there was no 0  
  if i < 0
      num = '1' + num
  return num        

Below is the implementation of above idea.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to find the binary
// representation of next greater integer
#include <bits/stdc++.h>
using namespace std;
  
// function to find the required
// binary representation
string nextGreater(string num)
{
    int l = num.size();
  
    // examine bits from the right
    for (int i=l-1; i>=0; i--)
    {
        // if '0' is encountered, convert
        // it to '1' and then break
        if (num.at(i) == '0')
        {
            num.at(i) = '1';
            break;
        }
  
        // else convert '1' to '0'
        else
            num.at(i) = '0';
    }
  
    // if the binary representation
    // contains only the set bits
    if (i < 0)
        num = "1" + num;
  
    // final binary representation
    // of the required integer
    return num;
}
  
// Driver program to test above
int main()
{
    string num = "10011";
    cout << "Binary representation of next number = "
         << nextGreater(num);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to find the binary
// representation of next greater integer
  
class GFG {
  
// function to find the required
// binary representation
    static String nextGreater(String num) {
  
        int l = num.length();
        int i;
        // examine bits from the right
        for (i = l - 1; i >= 0; i--) {
            // if '0' is encountered, convert
            // it to '1' and then break
            if (num.charAt(i) == '0') {
                num = num.substring(0, i) + '1' + num.substring(i+1);
                break;
            } // else convert '1' to '0'
            else {
                num = num.substring(0, i) + '0' + num.substring(i + 1);
            }
            // num[i] = '0';
        }
  
        // if the binary representation
        // contains only the set bits
        if (i < 0) {
            num = "1" + num;
        }
  
        // final binary representation
        // of the required integer
        return num;
    }
  
// Driver program to test above
    public static void main(String[] args) {
        String num = "10011";
        System.out.println("Binary representation of next number = "
                + nextGreater(num));
    }
}
//this code contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to find the binary
# representation of next greater integer
  
# function to find the required
# binary representation
def nextGreater(num1):
  
    l = len(num1);
    num = list(num1);
  
    # examine bits from the right
    i = l-1;
    while(i >= 0):
        # if '0' is encountered, convert
        # it to '1' and then break
        if (num[i] == '0'):
            num[i] = '1';
            break;
  
        # else convert '1' to '0'
        else:
            num[i] = '0';
        i-=1;
  
    # if the binary representation
    # contains only the set bits
    num1 = ''.join(num);
    if (i < 0):
        num1 = '1' + num1;
  
    # final binary representation
    # of the required integer
    return num1;
  
# Driver Code
num = "10011";
print("Binary representation of next number = ",nextGreater(num));
  
# This code is contributed by mits

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

      
// C# implementation to find the binary
// representation of next greater integer
 using System;
public class GFG {
   
// function to find the required
// binary representation
    static String nextGreater(String num) {
   
        int l = num.Length;
        int i;
        // examine bits from the right
        for (i = l - 1; i >= 0; i--) {
            // if '0' is encountered, convert
            // it to '1' and then break
            if (num[i] == '0') {
                num = num.Substring(0, i) + '1' + num.Substring(i+1);
                break;
            } // else convert '1' to '0'
            else {
                num = num.Substring(0, i) + '0' + num.Substring(i + 1);
            }
            // num[i] = '0';
        }
   
        // if the binary representation
        // contains only the set bits
        if (i < 0) {
            num = "1" + num;
        }
   
        // final binary representation
        // of the required integer
        return num;
    }
   
// Driver program to test above
    public static void Main() {
        String num = "10011";
        Console.WriteLine("Binary representation of next number = "
                + nextGreater(num));
    }
}
//this code contributed by Rajput-Ji

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
// PHP implementation to find the binary
// representation of next greater integer
  
// function to find the required
// binary representation
function nextGreater($num)
{
    $l = strlen($num);
  
    // examine bits from the right
    for ($i = $l - 1; $i >= 0; $i--)
    {
        // if '0' is encountered, convert
        // it to '1' and then break
        if ($num[$i] == '0')
        {
            $num[$i] = '1';
            break;
        }
  
        // else convert '1' to '0'
        else
            $num[$i] = '0';
    }
  
    // if the binary representation
    // contains only the set bits
    if ($i < 0)
        $num = "1" . $num;
  
    // final binary representation
    // of the required integer
    return $num;
}
  
// Driver Code
$num = "10011";
echo "Binary representation of next number = " .
                              nextGreater($num);
  
// This code is contributed by ita_c
?>

chevron_right


Output:

Binary representation of next number = 10100

Time Complexity : O(n) where n is number of bits in input.

This article is contributed by Ayush Jauhari. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



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.