# Largest palindromic number in an array

Given an array of non-negative integers arr[]. The task is to find the largest number in the array which is palindrome. If no such number exits then print -1.

Examples:

Input: arr[] = {1, 232, 54545, 999991};
Output: 54545

Input: arr[] = {1, 2, 3, 4, 5, 50};
Output: 5

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1:

• Sort the array in ascending order.
• Start traversing the array from the end.
• The first number which is a palindrome is the required answer.
• If no palindromic number is found then print -1

Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if n is palindrome ` `bool` `isPalindrome(``int` `n) ` `{ ` `    ``// Find the appropriate divisor ` `    ``// to extract the leading digit ` `    ``int` `divisor = 1; ` `    ``while` `(n / divisor >= 10) ` `        ``divisor *= 10; ` ` `  `    ``while` `(n != 0) { ` `        ``int` `leading = n / divisor; ` `        ``int` `trailing = n % 10; ` ` `  `        ``// If first and last digits are ` `        ``// not same then return false ` `        ``if` `(leading != trailing) ` `            ``return` `false``; ` ` `  `        ``// Removing the leading and trailing ` `        ``// digits from the number ` `        ``n = (n % divisor) / 10; ` ` `  `        ``// Reducing divisor by a factor ` `        ``// of 2 as 2 digits are dropped ` `        ``divisor = divisor / 100; ` `    ``} ` `    ``return` `true``; ` `} ` ` `  `// Function to find the largest palindromic number ` `int` `largestPalindrome(``int` `A[], ``int` `n) ` `{ ` ` `  `    ``// Sort the array ` `    ``sort(A, A + n); ` ` `  `    ``for` `(``int` `i = n - 1; i >= 0; --i) { ` ` `  `        ``// If number is palindrome ` `        ``if` `(isPalindrome(A[i])) ` `            ``return` `A[i]; ` `    ``} ` ` `  `    ``// If no palindromic number found ` `    ``return` `-1; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `A[] = { 1, 232, 54545, 999991 }; ` `    ``int` `n = ``sizeof``(A) / ``sizeof``(A); ` ` `  `    ``// print required answer ` `    ``cout << largestPalindrome(A, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of above approach ` ` `  `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `    ``// Function to check if n is palindrome ` `    ``static` `boolean` `isPalindrome(``int` `n) ` `    ``{ ` `        ``// Find the appropriate divisor ` `        ``// to extract the leading digit ` `        ``int` `divisor = ``1``; ` `        ``while` `(n / divisor >= ``10``) ` `            ``divisor *= ``10``; ` `     `  `        ``while` `(n != ``0``) { ` `            ``int` `leading = n / divisor; ` `            ``int` `trailing = n % ``10``; ` `     `  `            ``// If first and last digits are ` `            ``// not same then return false ` `            ``if` `(leading != trailing) ` `                ``return` `false``; ` `     `  `            ``// Removing the leading and trailing ` `            ``// digits from the number ` `            ``n = (n % divisor) / ``10``; ` `     `  `            ``// Reducing divisor by a factor ` `            ``// of 2 as 2 digits are dropped ` `            ``divisor = divisor / ``100``; ` `        ``} ` `        ``return` `true``; ` `    ``} ` `     `  `    ``// Function to find the largest palindromic number ` `    ``static` `int` `largestPalindrome(``int` `[]A, ``int` `n) ` `    ``{ ` `     `  `        ``// Sort the array ` `        ``Arrays.sort(A); ` `     `  `        ``for` `(``int` `i = n - ``1``; i >= ``0``; --i) { ` `     `  `            ``// If number is palindrome ` `            ``if` `(isPalindrome(A[i])) ` `                ``return` `A[i]; ` `        ``} ` `     `  `        ``// If no palindromic number found ` `        ``return` `-``1``; ` `    ``} ` `     `  `    ``// Driver program ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `        ``int` `[]A = { ``1``, ``232``, ``54545``, ``999991` `}; ` `        ``int` `n = A.length; ` `     `  `        ``// print required answer ` `        ``System.out.println(largestPalindrome(A, n)); ` `     `  `         `  `    ``} ` ` `  `} ` ` `  `// This code is contributed  ` `// by ihritik `

## Python3

 `# Python3 implementation of above approach  ` ` `  `# Function to check if n is palindrome  ` `def` `isPalindrome(n) : ` `     `  `    ``# Find the appropriate divisor  ` `    ``# to extract the leading digit  ` `    ``divisor ``=` `1` `     `  `    ``while` `(n ``/` `divisor >``=` `10``) : ` `        ``divisor ``*``=` `10` ` `  `    ``while` `(n !``=` `0``) : ` `         `  `        ``leading ``=` `n ``/``/` `divisor ` `        ``trailing ``=` `n ``%` `10` ` `  `        ``# If first and last digits are  ` `        ``# not same then return false  ` `        ``if` `(leading !``=` `trailing) : ` `            ``return` `False` ` `  `        ``# Removing the leading and trailing  ` `        ``# digits from the number  ` `        ``n ``=` `(n ``%` `divisor) ``/``/` `10` ` `  `        ``# Reducing divisor by a factor  ` `        ``# of 2 as 2 digits are dropped  ` `        ``divisor ``=` `divisor ``/``/` `100` `     `  `    ``return` `True` ` `  `# Function to find the largest  ` `# palindromic number  ` `def` `largestPalindrome(A, n) : ` ` `  `    ``# Sort the array  ` `    ``A.sort() ` ` `  `    ``for` `i ``in` `range``(n ``-` `1``, ``-``1``, ``-``1``) : ` ` `  `        ``# If number is palindrome  ` `        ``if` `(isPalindrome(A[i])) : ` `            ``return` `A[i]  ` `     `  `    ``# If no palindromic number found  ` `    ``return` `-``1` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``A ``=` `[ ``1``, ``232``, ``54545``, ``999991` `]  ` `    ``n ``=` `len``(A) ` ` `  `    ``# print required answer  ` `    ``print``(largestPalindrome(A, n)) ` ` `  `# This code is contributed by Ryuga `

## C#

 `// C# implementation of above approach ` ` `  `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Function to check if n is palindrome ` `    ``static` `bool` `isPalindrome(``int` `n) ` `    ``{ ` `        ``// Find the appropriate divisor ` `        ``// to extract the leading digit ` `        ``int` `divisor = 1; ` `        ``while` `(n / divisor >= 10) ` `            ``divisor *= 10; ` `     `  `        ``while` `(n != 0) { ` `            ``int` `leading = n / divisor; ` `            ``int` `trailing = n % 10; ` `     `  `            ``// If first and last digits are ` `            ``// not same then return false ` `            ``if` `(leading != trailing) ` `                ``return` `false``; ` `     `  `            ``// Removing the leading and trailing ` `            ``// digits from the number ` `            ``n = (n % divisor) / 10; ` `     `  `            ``// Reducing divisor by a factor ` `            ``// of 2 as 2 digits are dropped ` `            ``divisor = divisor / 100; ` `        ``} ` `        ``return` `true``; ` `    ``} ` `     `  `    ``// Function to find the largest palindromic number ` `    ``static` `int` `largestPalindrome(``int` `[]A, ``int` `n) ` `    ``{ ` `     `  `        ``// Sort the array ` `        ``Array.Sort(A); ` `     `  `        ``for` `(``int` `i = n - 1; i >= 0; --i) { ` `     `  `            ``// If number is palindrome ` `            ``if` `(isPalindrome(A[i])) ` `                ``return` `A[i]; ` `        ``} ` `     `  `        ``// If no palindromic number found ` `        ``return` `-1; ` `    ``} ` `     `  `    ``// Driver program ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `[]A = { 1, 232, 54545, 999991 }; ` `        ``int` `n = A.Length; ` `     `  `        ``// print required answer ` `        ``Console.WriteLine(largestPalindrome(A, n)); ` `     `  `         `  `    ``} ` ` `  `} ` ` `  `// This code is contributed  ` `// by ihritik `

## PHP

 `= 10) ` `        ``\$divisor` `*= 10; ` ` `  `    ``while` `(``\$n` `!= 0) ` `    ``{ ` `        ``\$leading` `= (int)(``\$n` `/ ``\$divisor``); ` `        ``\$trailing` `= ``\$n` `% 10; ` ` `  `        ``// If first and last digits are ` `        ``// not same then return false ` `        ``if` `(``\$leading` `!= ``\$trailing``) ` `            ``return` `false; ` ` `  `        ``// Removing the leading and trailing ` `        ``// digits from the number ` `        ``\$n` `= (int)((``\$n` `% ``\$divisor``) / 10); ` ` `  `        ``// Reducing divisor by a factor ` `        ``// of 2 as 2 digits are dropped ` `        ``\$divisor` `= (int)(``\$divisor` `/ 100); ` `    ``} ` `    ``return` `true; ` `} ` ` `  `// Function to find the largest ` `// palindromic number ` `function` `largestPalindrome(``\$A``, ``\$n``) ` `{ ` ` `  `    ``// Sort the array ` `    ``sort(``\$A``); ` ` `  `    ``for` `(``\$i` `= ``\$n` `- 1; ``\$i` `>= 0; --``\$i``)  ` `    ``{ ` ` `  `        ``// If number is palindrome ` `        ``if` `(isPalindrome(``\$A``[``\$i``])) ` `            ``return` `\$A``[``\$i``]; ` `    ``} ` ` `  `    ``// If no palindromic number found ` `    ``return` `-1; ` `} ` ` `  `// Driver Code ` `\$A` `= ``array``(1, 232, 54545, 999991); ` `\$n` `= sizeof(``\$A``); ` ` `  `// print required answer ` `echo` `largestPalindrome(``\$A``, ``\$n``); ` ` `  `// This code is contributed  ` `// by Akanksha Rai ` `?> `

Output:

```54545
```

Method 2:

• Set a variable currentMax = -1 and start traversing the array.
• If current element arr[i] > currentMax and arr[i] is a palindrome.
• Then set currentMax = arr[i].
• Print currentMax in the end.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to check if n is palindrome ` `bool` `isPalindrome(``int` `n) ` `{ ` `    ``// Find the appropriate divisor ` `    ``// to extract the leading digit ` `    ``int` `divisor = 1; ` `    ``while` `(n / divisor >= 10) ` `        ``divisor *= 10; ` ` `  `    ``while` `(n != 0) { ` `        ``int` `leading = n / divisor; ` `        ``int` `trailing = n % 10; ` ` `  `        ``// If first and last digits are ` `        ``// not same then return false ` `        ``if` `(leading != trailing) ` `            ``return` `false``; ` ` `  `        ``// Removing the leading and trailing ` `        ``// digits from the number ` `        ``n = (n % divisor) / 10; ` ` `  `        ``// Reducing divisor by a factor ` `        ``// of 2 as 2 digits are dropped ` `        ``divisor = divisor / 100; ` `    ``} ` `    ``return` `true``; ` `} ` ` `  `// Function to find the largest palindromic number ` `int` `largestPalindrome(``int` `A[], ``int` `n) ` `{ ` `    ``int` `currentMax = -1; ` ` `  `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// If a palindrome larger than the currentMax is found ` `        ``if` `(A[i] > currentMax && isPalindrome(A[i])) ` `            ``currentMax = A[i]; ` `    ``} ` ` `  `    ``// Return the largest palindromic number from the array ` `    ``return` `currentMax; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `A[] = { 1, 232, 54545, 999991 }; ` `    ``int` `n = ``sizeof``(A) / ``sizeof``(A); ` ` `  `    ``// print required answer ` `    ``cout << largestPalindrome(A, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of above approach ` ` `  `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `    ``// Function to check if n is palindrome ` `    ``static` `boolean` `isPalindrome(``int` `n) ` `    ``{ ` `        ``// Find the appropriate divisor ` `        ``// to extract the leading digit ` `        ``int` `divisor = ``1``; ` `        ``while` `(n / divisor >= ``10``) ` `            ``divisor *= ``10``; ` `     `  `        ``while` `(n != ``0``) { ` `            ``int` `leading = n / divisor; ` `            ``int` `trailing = n % ``10``; ` `     `  `            ``// If first and last digits are ` `            ``// not same then return false ` `            ``if` `(leading != trailing) ` `                ``return` `false``; ` `     `  `            ``// Removing the leading and trailing ` `            ``// digits from the number ` `            ``n = (n % divisor) / ``10``; ` `     `  `            ``// Reducing divisor by a factor ` `            ``// of 2 as 2 digits are dropped ` `            ``divisor = divisor / ``100``; ` `        ``} ` `        ``return` `true``; ` `    ``} ` `     `  `    ``// Function to find the largest palindromic number ` `    ``static` `int` `largestPalindrome(``int` `[]A, ``int` `n) ` `    ``{ ` `        ``int` `currentMax = -``1``; ` `     `  `        ``for` `(``int` `i = ``0``; i < n; i++) { ` `     `  `            ``// If a palindrome larger than the currentMax is found ` `            ``if` `(A[i] > currentMax && isPalindrome(A[i])) ` `                ``currentMax = A[i]; ` `        ``} ` `     `  `        ``// Return the largest palindromic number from the array ` `        ``return` `currentMax; ` `    ``} ` `     `  `    ``// Driver program ` `    ``public` `static` `void` `main(String []args) ` `    ``{ ` `        ``int` `[]A = { ``1``, ``232``, ``54545``, ``999991` `}; ` `        ``int` `n = A.length; ` `     `  `        ``// print required answer ` `        ``System.out.println(largestPalindrome(A, n)); ` `     `  `         `  `    ``} ` ` `  `} ` ` `  `// This code is contributed  ` `// by ihritik `

## Python3

 `# Python 3 implementation of above approach ` ` `  `# Function to check if n is palindrome ` `def` `isPalindrome(n): ` `     `  `    ``# Find the appropriate divisor ` `    ``# to extract the leading digit ` `    ``divisor ``=` `1` `    ``while` `(``int``(n ``/` `divisor) >``=` `10``): ` `        ``divisor ``*``=` `10` ` `  `    ``while` `(n !``=` `0``): ` `        ``leading ``=` `int``(n ``/` `divisor) ` `        ``trailing ``=` `n ``%` `10` ` `  `        ``# If first and last digits are ` `        ``# not same then return false ` `        ``if` `(leading !``=` `trailing): ` `            ``return` `False` ` `  `        ``# Removing the leading and trailing ` `        ``# digits from the number ` `        ``n ``=` `int``((n ``%` `divisor) ``/` `10``) ` ` `  `        ``# Reducing divisor by a factor ` `        ``# of 2 as 2 digits are dropped ` `        ``divisor ``=` `int``(divisor ``/` `100``) ` `    ``return` `True` ` `  `# Function to find the largest  ` `# palindromic number ` `def` `largestPalindrome(A, n): ` `    ``currentMax ``=` `-``1` ` `  `    ``for` `i ``in` `range``(``0``, n, ``1``): ` `         `  `        ``# If a palindrome larger than ` `        ``# the currentMax is found ` `        ``if` `(A[i] > currentMax ``and` `isPalindrome(A[i])): ` `            ``currentMax ``=` `A[i] ` `     `  `    ``# Return the largest palindromic  ` `    ``# number from the array ` `    ``return` `currentMax ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``A ``=` `[``1``, ``232``, ``54545``, ``999991``] ` `    ``n ``=` `len``(A) ` ` `  `    ``# print required answer ` `    ``print``(largestPalindrome(A, n)) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# implementation of above approach ` ` `  `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Function to check if n is palindrome ` `    ``static` `bool` `isPalindrome(``int` `n) ` `    ``{ ` `        ``// Find the appropriate divisor ` `        ``// to extract the leading digit ` `        ``int` `divisor = 1; ` `        ``while` `(n / divisor >= 10) ` `            ``divisor *= 10; ` `     `  `        ``while` `(n != 0) { ` `            ``int` `leading = n / divisor; ` `            ``int` `trailing = n % 10; ` `     `  `            ``// If first and last digits are ` `            ``// not same then return false ` `            ``if` `(leading != trailing) ` `                ``return` `false``; ` `     `  `            ``// Removing the leading and trailing ` `            ``// digits from the number ` `            ``n = (n % divisor) / 10; ` `     `  `            ``// Reducing divisor by a factor ` `            ``// of 2 as 2 digits are dropped ` `            ``divisor = divisor / 100; ` `        ``} ` `        ``return` `true``; ` `    ``} ` `     `  `    ``// Function to find the largest palindromic number ` `    ``static` `int` `largestPalindrome(``int` `[]A, ``int` `n) ` `    ``{ ` `        ``int` `currentMax = -1; ` `     `  `        ``for` `(``int` `i = 0; i < n; i++) { ` `     `  `            ``// If a palindrome larger than the currentMax is found ` `            ``if` `(A[i] > currentMax && isPalindrome(A[i])) ` `                ``currentMax = A[i]; ` `        ``} ` `     `  `        ``// Return the largest palindromic number from the array ` `        ``return` `currentMax; ` `    ``} ` `     `  `    ``// Driver program ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `[]A = { 1, 232, 54545, 999991 }; ` `        ``int` `n = A.Length; ` `     `  `        ``// print required answer ` `        ``Console.WriteLine(largestPalindrome(A, n)); ` `     `  `         `  `    ``} ` ` `  `} ` ` `  `// This code is contributed  ` `// by ihritik `

## PHP

 `= 10) ` `        ``\$divisor` `*= 10; ` ` `  `    ``while` `(``\$n` `!= 0)  ` `    ``{ ` `        ``\$leading` `= (int)(``\$n` `/ ``\$divisor``); ` `        ``\$trailing` `= ``\$n` `% 10; ` ` `  `        ``// If first and last digits are ` `        ``// not same then return false ` `        ``if` `(``\$leading` `!= ``\$trailing``) ` `            ``return` `false; ` ` `  `        ``// Removing the leading and trailing ` `        ``// digits from the number ` `        ``\$n` `= (``\$n` `% ``\$divisor``) / 10; ` ` `  `        ``// Reducing divisor by a factor ` `        ``// of 2 as 2 digits are dropped ` `        ``\$divisor` `= ``\$divisor` `/ 100; ` `    ``} ` `    ``return` `true; ` `} ` ` `  `// Function to find the largest ` `// palindromic number ` `function` `largestPalindrome(``\$A``, ``\$n``) ` `{ ` `    ``\$currentMax` `= -1; ` ` `  `    ``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++) ` `    ``{ ` ` `  `        ``// If a palindrome larger than  ` `        ``// the currentMax is found ` `        ``if` `(``\$A``[``\$i``] > ``\$currentMax` `&& ` `            ``isPalindrome(``\$A``[``\$i``])) ` `            ``\$currentMax` `= ``\$A``[``\$i``]; ` `    ``} ` ` `  `    ``// Return the largest palindromic  ` `    ``// number from the array ` `    ``return` `\$currentMax``; ` `} ` ` `  `// Driver Code ` `\$A` `= ``array``(1, 232, 54545, 999991); ` `\$n` `= sizeof(``\$A``); ` ` `  `// print required answer ` `echo``(largestPalindrome(``\$A``, ``\$n``)); ` ` `  `// This code is contributed  ` `// by Mukul Singh ` `?> `

Output:

```54545
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.