# Largest Palindrome Product – Leetcode

### Problem

Find the largest palindrome made from the product of two n-digit numbers. Since the result could be very large, you should return the largest palindrome mod 1337.

#### Example:

Input: 3  ,  Output: 987

#### Explanation:

99 x 91 = 9009, 9009 % 1337 = 987

Note:  The range of n is [1,8].

### Solution

```package com.programtalk.learn.interview.questions;

public class LargestPalindromeProduct {
public static void main(String[] args) {
for (int i = 2; i < 9; i++) {
System.out.println("input: " + i);
int largestPalindrome = new LargestPalindromeProduct().largestPalindrome(i);
System.out.println("plaindrome % 1337 is : " + largestPalindrome + "\n\n");

}
}

public int largestPalindrome(int n) {
if (n == 1) {
return 9;
}
// if n = 3 then max = 999
int upperBound = (int) Math.pow(10, n) - 1;
int lowerBound = upperBound / 10;
for (int v = upperBound - 1; v > lowerBound; v--) {
// creates maximum assumed palindrom
// e.g. if n = 3 first time the maximum assumed palindrom will be
// 998 899
long palindrome = Long.valueOf(v + new StringBuilder().append(v).reverse().toString());
for (long x = upperBound; x * x >= palindrome; x--) {
if (palindrome % x == 0) {
System.out.println("numbers multiplied : " + x + " * " + palindrome / x);
System.out.println("palindrome :" + palindrome);
return (int) (palindrome % 1337);
}
}
}
return 0;
}
}
```

And if don’t like to use `StringBuilder.reverse()` then you can use the below function to reverse the number

```	public int reverseInt(int input) {
long reversedNum = 0;

long input_long = input;

while (input_long != 0) {
reversedNum = reversedNum * 10 + input_long % 10;
input_long = input_long / 10;
}

if (reversedNum > Integer.MAX_VALUE || reversedNum < Integer.MIN_VALUE) {
throw new IllegalArgumentException();
}
return (int) reversedNum;
}

```

#### Output

```
input: 2
numbers multiplied : 99 * 91
palindrome :9009
plaindrome % 1337 is : 987

input: 3
numbers multiplied : 993 * 913
palindrome :906609
plaindrome % 1337 is : 123

input: 4
numbers multiplied : 9999 * 9901
palindrome :99000099
plaindrome % 1337 is : 597

input: 5
numbers multiplied : 99979 * 99681
palindrome :9966006699
plaindrome % 1337 is : 677

input: 6
numbers multiplied : 999999 * 999001
palindrome :999000000999
plaindrome % 1337 is : 1218

input: 7
numbers multiplied : 9998017 * 9997647
palindrome :99956644665999
plaindrome % 1337 is : 877

input: 8
numbers multiplied : 99999999 * 99990001
palindrome :9999000000009999
plaindrome % 1337 is : 475

```
Like this post? Don’t forget to share it!