Open In App

Represent a number as sum of minimum possible pseudobinary numbers

Last Updated : 19 Dec, 2022
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

Given a number, you have to represent this number as sum of minimum number of possible  pseudobinary numbers. A number is said to be  pseudobinary number if its decimal number consists of only two digits (0 and 1). Example: 11,10,101 are all  pseudobinary numbers.
Examples :- 
 

Input : 44
Output : 11 11 11 11

Explanation : 44 can be represented as sum of 
minimum 4 pseudobinary numbers as 11+11+11+11  

Input : 31
Output : 11 10 10

Explanation : 31 can be represented as sum of
minimum 3 pseudobinary numbers as 11+10+10  


 

Recommended Practice


The idea to do this is to first observe carefully that we need to calculate minimum number of possible pseudobinary numbers. To do this we find a new number m such that if for a place in given number n, the digit is non-zero then the digit in that place in m is 1 otherwise zero. For example, if n = 5102, then m will be 1101. Then we will print this number m and subtract m from n. We will keep repeating these steps until n is greater than zero.
 

C++
// C++ program to represent a given 
// number as sum of minimum possible
// pseudobinary numbers
#include<iostream>
using namespace std;

// function to represent a given 
// number as sum of minimum possible
// pseudobinary numbers
void pseudoBinary(int n)
{
    // Repeat below steps until n > 0
    while (n > 0)
    {                 
        // calculate m (A number that has same
        // number of digits as n, but has 1 in
        // place of non-zero digits 0 in place
        // of 0 digits)
        int temp = n, m = 0, p = 1;
        while (temp)
        {
            int rem = temp % 10;
            temp = temp / 10;

            if (rem != 0)
                m += p;
            
            p *= 10;
        }
        
        cout << m << " ";

        // subtract m from n
        n = n - m;
    }
}

// Driver code
int main()
{
    int n = 31;

    pseudoBinary(n);

    return 0;
}
Java
// Java program to represent a given
// number as sum of minimum possible
// pseudobinary numbers

import java.util.*;
import java.lang.*;

class GFG
{
    public static void pseudoBinary(int n)
    {
        // Repeat below steps until n > 0
        while (n != 0)
        {
            // calculate m (A number that has same
            // number of digits as n, but has 1 in
            // place of non-zero digits 0 in place
            // of 0 digits)
            int temp = n, m = 0, p = 1;
            while(temp != 0)
            {
                int rem = temp % 10;
                temp = temp / 10;

                if (rem != 0)
                    m += p;

                p *= 10;
            }

            System.out.print(m + " ");
            
            // subtract m from n
            n = n - m;
        }
        System.out.println(" ");
    }

// Driver code
public static void main(String[] args)
    {
        int n = 31;
        pseudoBinary(n);
    }
}

// This code is contributed by Mohit Gupta_OMG
Python3
# Python3 program to represent 
# a given number as sum of 
# minimum possible pseudobinary 
# numbers

# function to represent a 
# given number as sum of
# minimum possible
# pseudobinary numbers
def pseudoBinary(n):
    
    # Repeat below steps
    # until n > 0
    while (n > 0):
        
        # calculate m (A number 
        # that has same number 
        # of digits as n, but 
        # has 1 in place of non-zero 
        # digits 0 in place of 0 digits)
        temp = n;
        m = 0;
        p = 1;
        while (temp):
            rem = temp % 10;
            temp = int(temp / 10);
            
            if (rem != 0):
                m += p;
            p *= 10;
        
        print(m,end=" ");
        
        # subtract m from n
        n = n - m;

# Driver code
n = 31;
pseudoBinary(n);

# This code is contributed
# by mits.
C#
// C# program to represent a given
// number as sum of minimum possible
// pseudobinary numbers

using System;

class GFG
{
    public static void pseudoBinary(int n)
    {
        // Repeat below steps until n > 0
        while (n != 0)
        {
            // calculate m (A number that has same
            // number of digits as n, but has 1 in
            // place of non-zero digits 0 in place
            // of 0 digits)
            int temp = n, m = 0, p = 1;
            while(temp != 0)
            {
                int rem = temp % 10;
                temp = temp / 10;

                if (rem != 0)
                    m += p;

                p *= 10;
            }

            Console.Write(m + " ");
            
            // subtract m from n
            n = n - m;
        }
        Console.Write(" ");
    }

// Driver code
public static void Main()
    {
        int n = 31;
        pseudoBinary(n);
    }
}

// This code is contributed by nitin mittal
PHP
<?php
// PHP program to represent a 
// given number as sum of minimum 
// possible pseudobinary numbers

// Function to represent a 
// given number as sum of minimum 
// possible pseudobinary numbers
function pseudoBinary($n)
{
    // Repeat below steps until n > 0
    while ($n > 0)
    {                 
        // calculate m (A number 
        // that has same number of 
        // digits as n, but has 1 
        // in place of non-zero 
        // digits 0 in place of 0 
        // digits)
        $temp = $n; $m = 0; $p = 1;
        while ($temp)
        {
            $rem = $temp % 10;
            $temp = $temp / 10;

            if ($rem != 0)
                $m += $p;
            
            $p *= 10;
        }
        
        echo $m , " ";

        // subtract m from n
        $n = $n - $m;
    }
}

// Driver code
$n = 31;
pseudoBinary($n);

// This code is contributed
// by nitin mittal.
?>
JavaScript
<script>

// JavaScript program to represent a given
// number as sum of minimum possible
// pseudobinary numbers    

function pseudoBinary( n)
{
        // Repeat below steps until n > 0
        while (n != 0) 
        {
            // calculate m (A number that has same
            // number of digits as n, but has 1 in
            // place of non-zero digits 0 in place
            // of 0 digits)
            var temp = n, m = 0, p = 1;
            while (temp != 0) {
                var rem = temp % 10;
                temp = parseInt(temp / 10);

                if (rem != 0)
                    m += p;

                p *= 10;
            }

            document.write(m + " ");

            // subtract m from n
            n = n - m;
        }
        document.write(" ");
    }

    // Driver code
    
        var n = 31;
        pseudoBinary(n);

// This code is contributed by Amit Katiyar 

</script>

Output:  

11 10 10


Time Complexity : O( log n ) 
Auxiliary Space : O(1)
 


Article Tags :

Similar Reads