Find maximum product of digits among numbers less than or equal to N
Given an integer N > 0, the task is to find the maximum product of digits among numbers less than or equal to N.
Examples:
Input: N = 390
Output: 216
Maximum possible product is given by the number 389
3 * 8 * 9 = 216
Input: N = 432
Output: 243
Approach: This problem can also be solved using the method described in this article taking lower limit as 1 and upper limit as N. Another method to solve this problem is by using recursion. The conditions for recursion are as follows:
- If N = 0 then return 1.
- If N < 10 then return N.
- Otherwise, return max(maxProd(N / 10) * (N % 10), maxProd((N / 10) – 1) * 9
At each step of recursion, either the last digit or 9 is taken to maximize the product of digit.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int maxProd( int N)
{
if (N == 0)
return 1;
if (N < 10)
return N;
return max(maxProd(N / 10) * (N % 10),
maxProd(N / 10 - 1) * 9);
}
int main()
{
int N = 390;
cout << maxProd(N);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int maxProd( int N)
{
if (N == 0 )
return 1 ;
if (N < 10 )
return N;
return Math.max(maxProd(N / 10 ) * (N % 10 ),
maxProd(N / 10 - 1 ) * 9 );
}
public static void main (String[] args)
{
int N = 390 ;
System.out.println (maxProd(N));
}
}
|
Python3
def maxProd(N):
if (N = = 0 ):
return 1
if (N < 10 ):
return N
return max (maxProd(N / / 10 ) * (N % 10 ),
maxProd(N / / 10 - 1 ) * 9 )
N = 390
print (maxProd(N))
|
C#
using System;
class GFG
{
static int maxProd( int N)
{
if (N == 0)
return 1;
if (N < 10)
return N;
return Math.Max(maxProd(N / 10) * (N % 10),
maxProd(N / 10 - 1) * 9);
}
static public void Main ()
{
int N = 390;
Console.WriteLine(maxProd(N));
}
}
|
PHP
<?php
function maxProd( $N )
{
if ( $N == 0)
return 1;
if ( $N < 10)
return $N ;
return max(maxProd((int)( $N / 10)) * ( $N % 10),
maxProd((int)( $N / 10) - 1) * 9);
}
$N = 390;
echo maxProd( $N );
?>
|
Javascript
<script>
function maxProd(N)
{
if (N == 0)
return 1;
if (N < 10)
return N;
return Math.max(maxProd(parseInt(N / 10)) * (N % 10),
maxProd(parseInt(N / 10) - 1) * 9);
}
let N = 390;
document.write(maxProd(N));
</script>
|
Time complexity: O(logN)
Auxiliary space: O(logN) for recursive stack space.
Last Updated :
16 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...