Largest palindrome which is product of two n-digit numbers
Given a value n, find out the largest palindrome number which is product of two n digit numbers.
Examples :
Input : n = 2
Output : 9009
9009 is the largest number which is product of two
2-digit numbers. 9009 = 91*99.
Input : n = 3
Output : 906609
Below are steps to find the required number.
- Find a lower limit on n digit numbers. For example, for n = 2, lower_limit is 10.
- Find an upper limit on n digit numbers. For example, for n = 2, upper_limit is 99.
- Consider all pairs of numbers wherever number lies in range [lower_limit, upper_limit]
Below is the implementation of above steps.
C++
#include <bits/stdc++.h>
using namespace std;
int larrgestPalindrome( int n)
{
int upper_limit = pow (10,n) - 1;
int lower_limit = 1 + upper_limit / 10;
int max_product = 0;
for ( int i = upper_limit;
i >= lower_limit;
i--)
{
for ( int j = i; j >= lower_limit; j--)
{
int product = i * j;
if (product < max_product)
break ;
int number = product;
int reverse = 0;
while (number != 0)
{
reverse = reverse * 10 +
number % 10;
number /= 10;
}
if (product == reverse &&
product > max_product)
max_product = product;
}
}
return max_product;
}
int main()
{
int n = 2;
cout << larrgestPalindrome(n);
return 0;
}
|
Java
import java.lang.Math;
class GFG
{
static int larrgestPalindrome( int n)
{
int upper_limit = ( int )Math.pow( 10 , n) - 1 ;
int lower_limit = 1 + upper_limit / 10 ;
int max_product = 0 ;
for ( int i = upper_limit; i >= lower_limit; i--)
{
for ( int j = i; j >= lower_limit; j--)
{
int product = i * j;
if (product < max_product)
break ;
int number = product;
int reverse = 0 ;
while (number != 0 )
{
reverse = reverse * 10 + number % 10 ;
number /= 10 ;
}
if (product == reverse && product > max_product)
max_product = product;
}
}
return max_product;
}
public static void main (String[] args)
{
int n = 2 ;
System.out.print(larrgestPalindrome(n));
}
}
|
Python3
def larrgestPalindrome(n):
upper_limit = ( 10 * * (n)) - 1
lower_limit = 1 + upper_limit / / 10
max_product = 0
for i in range (upper_limit,lower_limit - 1 , - 1 ):
for j in range (i,lower_limit - 1 , - 1 ):
product = i * j
if (product < max_product):
break
number = product
reverse = 0
while (number ! = 0 ):
reverse = reverse * 10 + number % 10
number = number / / 10
if (product = = reverse and product > max_product):
max_product = product
return max_product
n = 2
print (larrgestPalindrome(n))
|
C#
using System;
class GFG
{
static int larrgestPalindrome( int n)
{
int upper_limit = ( int )Math.Pow(10, n) - 1;
int lower_limit = 1 + upper_limit / 10;
int max_product = 0;
for ( int i = upper_limit; i >= lower_limit; i--)
{
for ( int j = i; j >= lower_limit; j--)
{
int product = i * j;
if (product < max_product)
break ;
int number = product;
int reverse = 0;
while (number != 0)
{
reverse = reverse * 10 + number % 10;
number /= 10;
}
if (product == reverse && product > max_product)
max_product = product;
}
}
return max_product;
}
public static void Main ()
{
int n = 2;
Console.Write(larrgestPalindrome(n));
}
}
|
PHP
<?php
function larrgestPalindrome( $n )
{
$upper_limit = 0;
for ( $i = 1; $i <= $n ; $i ++)
{
$upper_limit *= 10;
$upper_limit += 9;
}
$lower_limit = 1 + (int)( $upper_limit / 10);
$max_product = 0;
for ( $i = $upper_limit ;
$i >= $lower_limit ;
$i --)
{
for ( $j = $i ;
$j >= $lower_limit ;
$j --)
{
$product = $i * $j ;
if ( $product < $max_product )
break ;
$number = $product ;
$reverse = 0;
while ( $number != 0)
{
$reverse = $reverse * 10 +
$number % 10;
$number = (int)( $number / 10);
}
if ( $product == $reverse &&
$product > $max_product )
$max_product = $product ;
}
}
return $max_product ;
}
$n = 2;
echo (larrgestPalindrome( $n ));
?>
|
Javascript
<script>
function larrgestPalindrome(n)
{
let upper_limit = Math.pow(10, n) - 1;
let lower_limit = 1 +
parseInt(upper_limit / 10, 10);
let max_product = 0;
for (let i = upper_limit; i >= lower_limit; i--)
{
for (let j = i; j >= lower_limit; j--)
{
let product = i * j;
if (product < max_product)
break ;
let number = product;
let reverse = 0;
while (number != 0)
{
reverse = reverse * 10 + number % 10;
number = parseInt(number / 10, 10);
}
if (product == reverse &&
product > max_product)
max_product = product;
}
}
return max_product;
}
let n = 2;
document.write(larrgestPalindrome(n));
</script>
|
Output :
9009
Time Complexity: O(n*n*log10(product)), where n is the upper limit calculated and product is (product of two n-digit numbers)
Auxiliary Space: O(1), as no extra space is required|
The approach used in this post is simple and straightforward. Please comment if you find a better approach.
Last Updated :
22 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...