Thursday, 1 October 2015

Check For Number Palindrome

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;

}