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 = 216Input: 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++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;// Function that returns the maximum product of// digits among numbers less than or equal to Nint 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);}// Driver codeint main(){ int N = 390; cout << maxProd(N); return 0;} |
Java
// Java implementation of the approachimport java.io.*;class GFG{ // Function that returns the maximum product of// digits among numbers less than or equal to Nstatic 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);}// Driver codepublic static void main (String[] args){ int N = 390; System.out.println (maxProd(N));}}// This code is contributed by ajit. |
Python3
# Python3 implementation of the approach# Function that returns the maximum product of# digits among numbers less than or equal to Ndef maxProd(N): if (N == 0): return 1 if (N < 10): return N return max(maxProd(N // 10) * (N % 10), maxProd(N // 10 - 1) * 9)# Driver codeN = 390print(maxProd(N))# This code is contributed by mohit kumar |
C#
// C# implementation of the approachusing System;class GFG{ // Function that returns the maximum product of// digits among numbers less than or equal to Nstatic 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);}// Driver codestatic public void Main (){ int N = 390; Console.WriteLine(maxProd(N));}}// This code is contributed by Tushil.. |
PHP
<?php// PHP implementation of the approach// Function that returns the maximum product of// digits among numbers less than or equal to Nfunction 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);}// Driver code$N = 390;echo maxProd($N);// This code is contributed by Akanksha Rai?> |
Javascript
<script>// Javascript implementation of the approach// Function that returns the maximum product of// digits among numbers less than or equal to Nfunction 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);}// Driver codelet N = 390;document.write(maxProd(N));// This code is contributed// by bobby</script> |
216
Time complexity: O(logN)
Auxiliary space: O(logN) for recursive stack space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Find More to that Topic: geeksforgeeks.org/find-maximum-product-of-digits-among-numbers-less-than-or-equal-to-n/ […]
… [Trackback]
[…] Here you will find 13357 additional Information on that Topic: geeksforgeeks.org/find-maximum-product-of-digits-among-numbers-less-than-or-equal-to-n/ […]