Given a number ‘n’ and our goal is to find out it is palindrome or not without using
any extra space. We can’t make a new copy of the number .
Examples:
Input : 2332
Output : Yes it is Palindrome.
Explanation:
original number = 2332
reversed number = 2332
Both are same hence the number is palindrome.
Input :1111
Output :Yes it is Palindrome.
Input : 1234
Output : No not Palindrome.
A recursive solution is discussed in below post.
Check if a number is Palindrome
In this post a different solution is discussed.
1) We can compare the first digit and the last digit, then we repeat the process.
2) For the first digit, we need the order of the number. Say, 12321. Dividing this by 10000 would get us the leading 1. The trailing 1 can be retrieved by taking the mod with 10.
3 ) Now, to reduce this to 232.
(12321 % 10000)/10 = (2321)/10 = 232
4 ) And now, the 10000 would need to be reduced by a factor of 100.
Here is the implementation of the above algorithm :
C++
#include <bits/stdc++.h>
using namespace std;
bool isPalindrome( int );
bool isPalindrome( int n)
{
int divisor = 1;
while (n / divisor >= 10)
divisor *= 10;
while (n != 0)
{
int leading = n / divisor;
int trailing = n % 10;
if (leading != trailing)
return false ;
n = (n % divisor) / 10;
divisor = divisor / 100;
}
return true ;
}
int main()
{
isPalindrome(1001) ? cout << "Yes, it is Palindrome" :
cout << "No, not Palindrome" ;
return 0;
}
|
Java
public class GFG
{
static boolean isPalindrome( int n)
{
int divisor = 1 ;
while (n / divisor >= 10 )
divisor *= 10 ;
while (n != 0 )
{
int leading = n / divisor;
int trailing = n % 10 ;
if (leading != trailing)
return false ;
n = (n % divisor) / 10 ;
divisor = divisor / 100 ;
}
return true ;
}
public static void main(String args[])
{
if (isPalindrome( 1001 ))
System.out.println( "Yes, it is Palindrome" );
else
System.out.println( "No, not Palindrome" );
}
}
|
Python3
def isPalindrome(n):
divisor = 1
while (n / divisor > = 10 ):
divisor * = 10
while (n ! = 0 ):
leading = n / / divisor
trailing = n % 10
if (leading ! = trailing):
return False
n = (n % divisor) / / 10
divisor = divisor / 100
return True
if (isPalindrome( 1001 )):
print ( 'Yes, it is palindrome' )
else :
print ( 'No, not palindrome' )
|
C#
using System;
class GFG
{
static bool isPalindrome( int n)
{
int divisor = 1;
while (n / divisor >= 10)
divisor *= 10;
while (n != 0)
{
int leading = n / divisor;
int trailing = n % 10;
if (leading != trailing)
return false ;
n = (n % divisor) / 10;
divisor = divisor / 100;
}
return true ;
}
static public void Main ()
{
if (isPalindrome(1001))
Console.WriteLine( "Yes, it " +
"is Palindrome" );
else
Console.WriteLine( "No, not " +
"Palindrome" );
}
}
|
PHP
<?php
function isPalindrome( $n )
{
$divisor = 1;
while ( $n / $divisor >= 10)
$divisor *= 10;
while ( $n != 0)
{
$leading = floor ( $n / $divisor );
$trailing = $n % 10;
if ( $leading != $trailing )
return false;
$n = ( $n % $divisor ) / 10;
$divisor = $divisor / 100;
}
return true;
}
if (isPalindrome(1001) == true)
echo "Yes, it is Palindrome" ;
else
echo "No, not Palindrome" ;
?>
|
Javascript
<script>
function isPalindrome(n) {
var divisor = 1;
while (parseInt(n / divisor) >= 10)
divisor *= 10;
while (n != 0) {
var leading = parseInt(n / divisor);
var trailing = n % 10;
if (leading != trailing)
return false ;
n = parseInt((n % divisor) / 10);
divisor = divisor / 100;
}
return true ;
}
if (isPalindrome(1001))
document.write( "Yes, it is Palindrome" );
else
document.write( "No, not Palindrome" );
</script>
|
OutputYes, it is Palindrome
Time Complexity: O(d), where d is the number of digits in a given number
Auxiliary space : O(1)
This article is contributed by Abhijit Shankhdhar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.