Check if a number is Palindrome or Not

Problem Statement:  Given a number check if it is a palindrome.

An integer is considered a palindrome when it reads the same backward as forward.

Examples:

Example 1:
Input: N = 123
Output: Not Palindrome Number
Explanation: 123 read backwards is 321.Since these are two different numbers 123 is not a palindrome.

Example 2:
Input: N =  121 
Output: Palindrome Number
Explanation: 121 read backwards as 121.Since these are two same numbers 121 is a palindrome.

Solution

Disclaimer: Don’t jump directly to the solution, try it out yourself first.

Approach:  We can reverse the original number and compare the original with the reversed number. If both are the same, the number qualifies as a palindrome number.

Say the input number is X. Declare a variable Y to store the reverse and initialize it to 0. Make a copy of X, say dummy that will be used later for comparison.

 Let’s understand the procedure to reverse a number.

  • At every step extract the last digit using % operator. Suppose X%10 = d.
  • We will append this last digit , d to Y using a formula 10*Y+d.
  • The last digit of X has been used.Discard it using X/10. 

Repeat these steps for the remaining digits. After every iteration, the size of X will shrink by one digit. Terminate the iteration when X = 0 meaning no new digits are left to be reversed.

The reversed number Y is compared with the dummy variable since X was destroyed while iteration. If Y equals dummy print “Palindrome Number” otherwise “Not Palindrome Number”.

Code:

C++ Code

#include <iostream>

using namespace std;
int reverse(int X) {
   int Y = 0;
   while (X > 0) {
      //Extract the last digit
      int digit = X % 10;
      //Appending last digit
      Y = Y * 10 + digit;
      // Shrinking X by discarding the last digit
      X = X / 10;
   }
   return Y;
}
int main() {
   int X = 121;
   int dummy = X;
   int Y = reverse(X);
   if (dummy == Y) {
      cout << "Palindrome Number" << endl;
   } else {
      cout << "Not Palindrome Number" << endl;
   }
   return 0;
}

Output: Palindrome Number

Time Complexity: O(logN) for reversing N digits of input integer.

Space Complexity: O(1)

Java Code

public class Main {
   static int reverse(int X) {
      int Y = 0;
      while (X > 0) {
         //Extract the last digit
         int digit = X % 10;
         //Appending last digit
         Y = Y * 10 + digit;
         // Shrinking X by discarding the last digit
         X = X / 10;
      }
      return Y;
   }
   public static void main(String[] args) {

      int X = 121;
      int dummy = X;
      int Y = reverse(X);
      if (dummy == Y) {
         System.out.println("Palindrome Number");
      } 
      else {
         System.out.println("Not Palindrome Number");
      }

   }
}  

Output: Palindrome Number

Time Complexity: O(logN) for reversing N digits of input integer.

Space Complexity: O(1)

Special thanks to Somparna Chakrabarti for contributing to this article on takeUforward. If you also wish to share your knowledge with the takeUforward fam, please check out this article