Given a positive integer N, the task is to find the minimum N-digit number such that performing the following operations on it in the following order results into the largest N-digit number:
- Convert the number to its Binary Coded Decimal form.
- Concatenate all the resulting nibbles to form a binary number.
- Remove the least significant N bits from the number.
- Convert this obtained binary number to its decimal form.
Examples:
Input: N = 4
Output: 9990
Explanation:Â
Largest 4 digit number = 9999Â
BCD of 9999 = 1001 1001 1001 1001Â
Binary form = 1001100110011001Â
Replacing last 4 bits by 0000: 1001 1001 1001 0000 = 9990Â
Therefore, the minimum N-digit number that can generate 9999 is 9990Input: N = 5
Output: 99980
Explanation:Â
Largest 5 digit number = 99999Â
BCD of 99999 = 1001 1001 1001 1001 1001Â
Binary for = 10011001100110011001Â
Replacing last 5 bits by 00000: 10011001100110000000 = 99980Â
Therefore, the minimum N-digit number that can generate 99999 is 99980
Approach: The problem can be solved based on the following observations of BCD numbers. Follow the steps below to solve the problem:Â
Â
- Each nibble in BCD does not increase beyond 1001 which is 9 in binary form, since the maximum single digit decimal number is 9.
- Thus, it can be concluded that the maximum binary number that can be obtained by bringing N nibbles together is 1001 concatenated N times, whose decimal representation is have to be the digit 9 concatenated N times.
- The last N LSBs from this binary form is required to be removed. Thus the values of these bits will not contribute in making the result larger. Therefore, keeping the last N bits as 9 is not necessary as we need the minimum number producing the maximum result.
- The value of floor(N/4) will give us the number of nibbles that will be completely removed from the number. Assign these nibbles the value of 0000 to minimize the number.
- The remainder of N/4 gives us the number of digits that would be switched to 0 from the LSB of the last non-zero nibble after having performed the previous step.
- This BCD formed by performing the above steps, when converted to decimal, generates the required maximized N digit number.
Below is the implementation of the above approach:
C++
// C++ Program to implement // the above approach #include <bits/stdc++.h> using namespace std; Â
void maximizedNdigit( int n) { Â
    int count0s, count9s;     // If n is divisible by 4     if (n % 4 == 0) { Â
        count0s = n / 4;         count9s = n - n / 4;     } Â
    // Otherwise     else { Â
        count0s = n / 4 + 1;         count9s = n - count0s;         count0s--;     } Â
    while (count9s--)         cout << '9' ; Â
    if (n % 4 != 0)         cout << '8' ; Â
    while (count0s--)         cout << '0' ;     cout << endl; } Â
// Driver Code int main() { Â Â Â Â int n = 5; Â Â Â Â maximizedNdigit(n); } |
C
#include <stdio.h> Â
void maximizedNdigit( int n) { Â
  int count0s, count9s;   // If n is divisible by 4   if (n % 4 == 0) { Â
    count0s = n / 4;     count9s = n - n / 4;   } Â
  // Otherwise   else { Â
    count0s = n / 4 + 1;     count9s = n - count0s;     count0s--;   } Â
  while (count9s--)     printf ( "9" ); Â
  if (n % 4 != 0)     printf ( "8" ); Â
  while (count0s--)     printf ( "0" );   printf ( "\n" ); } Â
// Driver Code int main() { Â Â int n = 5; Â Â maximizedNdigit(n); Â Â return 0; } Â
// This code is contributed by phalashi. |
Java
// Java program to implement // the above approach import java.io.*; Â
class GFG{ Â
static void maximizedNdigit( int n) { Â Â Â Â int count0s, count9s; Â Â Â Â Â Â Â Â Â // If n is divisible by 4 Â Â Â Â if (n % 4 == 0 ) Â Â Â Â { Â Â Â Â Â Â Â Â count0s = n / 4 ; Â Â Â Â Â Â Â Â count9s = n - n / 4 ; Â Â Â Â } Â
    // Otherwise     else     {         count0s = n / 4 + 1 ;         count9s = n - count0s;         count0s--;     } Â
    while (count9s != 0 )     {         count9s--;         System.out.print( '9' );     } Â
    if (n % 4 != 0 )         System.out.print( '8' ); Â
    while (count0s != 0 )     {         count0s--;         System.out.print( '0' );     }          System.out.println(); } Â
// Driver Code public static void main(String[] args) { Â Â Â Â int n = 5 ; Â Â Â Â Â Â Â Â Â maximizedNdigit(n); } } Â
// This code is contributed by sanjoy_62 |
Python3
# Python3 program to implement # the above approach def maximizedNdigit(n): Â
    # If n is divisible by 4     if (n % 4 = = 0 ):         count0s = n / / 4         count9s = n - n / / 4          # Otherwise     else :         count0s = n / / 4 + 1         count9s = n - count0s         count0s - = 1          while (count9s):         print ( '9' , end = "")         count9s - = 1 Â
    if (n % 4 ! = 0 ):         print ( '8' , end = "") Â
    while (count0s):         print ( '0' , end = "")         count0s - = 1              print () Â
# Driver Code if __name__ = = "__main__" : Â
    n = 5     maximizedNdigit(n) Â
# This code is contributed by chitranayal |
C#
// C# program to implement // the above approach using System; Â
class GFG{ Â
static void maximizedNdigit( int n) { Â Â Â Â int count0s, count9s; Â Â Â Â Â Â Â Â Â // If n is divisible by 4 Â Â Â Â if (n % 4 == 0) Â Â Â Â { Â Â Â Â Â Â Â Â count0s = n / 4; Â Â Â Â Â Â Â Â count9s = n - n / 4; Â Â Â Â } Â
    // Otherwise     else     {         count0s = n / 4 + 1;         count9s = n - count0s;         count0s--;     } Â
    while (count9s != 0)     {         count9s--;         Console.Write( '9' );     } Â
    if (n % 4 != 0)         Console.Write( '8' ); Â
    while (count0s != 0)     {         count0s--;         Console.Write( '0' );     }              Console.WriteLine(); } Â
// Driver Code public static void Main() { Â Â Â Â int n = 5; Â Â Â Â Â Â Â Â Â maximizedNdigit(n); } } Â
// This code is contributed by sanjoy_62 |
Javascript
<script> Â
// JavaScript Program to implement // the above approach Â
function maximizedNdigit(n) { Â
    let count0s, count9s;     // If n is divisible by 4     if (n % 4 == 0) { Â
        count0s = Math.floor(n / 4);         count9s = n - Math.floor(n / 4);     } Â
    // Otherwise     else { Â
        count0s = Math.floor(n / 4) + 1;         count9s = n - count0s;         count0s--;     } Â
    while (count9s--)         document.write( '9' ); Â
    if (n % 4 != 0)         document.write( '8' ); Â
    while (count0s--)         document.write( '0' );     document.write( "<br>" ); } Â
// Driver Code Â
    let n = 5;     maximizedNdigit(n); Â
Â
// This code is contributed by Surbhi Tyagi. Â
</script> |
99980
Â
Time Complexity: O(N)Â
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!