Program Logic
- A palindrome number is the one which is same as the number when the digits in number are reversed.
- We keep a copy of original number.
- Try to create reverse number as follows :
1. Let us say number is 121. Reverse number is initially 0.
2. We take the last digit i.e. 1.
Iteration 1 - last digit = 1
Iteration 2 - last digit = 2
Iteration 3 - last digit = 1
3. Multiply reverse number by 10 shifting current digits to right.
Iteration 1 - reverse number = 0*10 = 0
Iteration 2 - reverse number = 1*10 = 10
Iteration 3 - reverse number = 12*10 = 120
4. Now add last digit to reverse number.
Iteration 1 - reverse number = 0 + 1 = 1
Iteration 2 - reverse number = 10 + 2 = 12
Iteration 3 - reverse number = 120 + 1
5. Remove the last digit from original number
Iteration 1 - Original number 12
Iteration 2 - Original number 1
Iteration 3 - Original number 0
5. Repeat steps 2-4 until original number becomes 0. - Now check if reverse number and copy of original number are the same. If yes, we have a palindrome number :D
/*
* C Program to check if a number is palindrome or not.
*/
// Includes
#include <stdio.h>
// Declarations
/* isPalindrome
* Description : A function to check if given number is palindrome or not.
* Parameters : i_number - number which needs to be checked for palindrome.
* Returns : unsigned short 0 - if a number is not palindrome.
* 1 - if a number is palindrome.
*/
unsigned short isPalindrome(int i_number);
// Definitions
int main()
{
int i_number;
printf("Enter numbwe that needs to be checked for palindrome : ");
scanf("%d",&i_number);
// Check for palindrome.
if (isPalindrome(i_number))
{
printf("Entered number %d is palindrome.\n",i_number);
}
else
{
printf("Entered number %d is not palindrome.\n",i_number);
}
}
unsigned short isPalindrome(int i_number)
{
int i_reverseNumber = 0; // to store reverse number.
int i_copyNumber = i_number; // to store number copy for modification.
int i_lastDigit;
while (i_copyNumber) // unless number becomes 0
{
// Take the last digit.
i_lastDigit = i_copyNumber %10;
// Shift digits to right by 1 place.
i_reverseNumber *= 10;
// Add last digit on right
i_reverseNumber += i_lastDigit;
// Remove last digit from original number.
i_copyNumber /= 10;
}
return i_reverseNumber == i_number;
}
pretty well explained.
ReplyDelete