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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of above approach
#include <bits/stdc++.h>
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[0]);
  
    // print required answer
    cout << largestPalindrome(A, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of above approach
  
// Function to check if n is palindrome
function 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
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
?>

chevron_right


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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of above approach
#include <bits/stdc++.h>
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[0]);
  
    // print required answer
    cout << largestPalindrome(A, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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


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.