C++ Program to Check Whether a Number is Palindrome or Not
Last Updated :
22 Feb, 2023
Given an integer, write a function that returns true if the given number is palindrome, else false. For example, 12321 is palindrome, but 1451 is not palindrome.
Let the given number be num. A simple method for this problem is to first reverse digits of num, then compare the reverse of num with num. If both are same, then return true, else false.
Following is an interesting method inspired from method#2 of this post. The idea is to create a copy of num and recursively pass the copy by reference, and pass num by value. In the recursive calls, divide num by 10 while moving down the recursion tree. While moving up the recursion tree, divide the copy by 10. When they meet in a function for which all child calls are over, the last digit of num will be ith digit from the beginning and the last digit of copy will be ith digit from the end.
C++
#include <iostream>
using namespace std;
int oneDigit( int num)
{
return (num >= 0 && num < 10);
}
bool isPalUtil( int num, int * dupNum)
{
if (oneDigit(num))
return (num == (*dupNum) % 10);
if (!isPalUtil(num / 10, dupNum))
return false ;
*dupNum /= 10;
return (num % 10 == (*dupNum) % 10);
}
int isPal( int num)
{
if (num < 0)
num = -num;
int * dupNum = new int (num);
return isPalUtil(num, dupNum);
}
int main()
{
int n = 12321;
isPal(n) ? cout << "Yes" :
cout << "No" << endl;
n = 12;
isPal(n) ? cout << "Yes" :
cout << "No" << endl;
n = 88;
isPal(n) ? cout << "Yes" :
cout << "No" << endl;
n = 8999;
isPal(n) ? cout << "Yes" :
cout << "No" ;
return 0;
}
|
Output:
Yes
No
Yes
No
Time complexity: O(log(n))
Auxiliary space: O(1).
To check a number is palindrome or not without using any extra space
Method #2:Using string() method
- When the number of digits of that number exceeds 1018, we can’t take that number as an integer since the range of long long int doesn’t satisfy the given number.
- So take input as a string, Run a loop from starting to length/2 and check the first character(numeric) to the last character of the string and second to second last one, and so on ….If any character mismatches, the string wouldn’t be a palindrome.
Below is the implementation of the above approach
C++14
#include <iostream>
using namespace std;
int checkPalindrome(string str)
{
int len = str.length();
for ( int i = 0; i < len / 2; i++)
{
if (str[i] != str[len - i - 1])
return false ;
}
return true ;
}
int main()
{
string st =
"112233445566778899000000998877665544332211" ;
if (checkPalindrome(st) == true )
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Time Complexity: O(|str|)
Space Complexity: O(1) as no extra space has been used.
Share your thoughts in the comments
Please Login to comment...