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
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++ 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 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 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# 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 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. ?> |
<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)