|
1 | 1 | /** |
2 | 2 | * @file |
3 | | - * @brief Program to identify if a number is [palindrome |
| 3 | + * @brief Program to identify if a number is a [palindrome |
4 | 4 | * number](https://en.wikipedia.org/wiki/Palindrome) or not. |
| 5 | + * @details A palindrome number is a number that reads the same backward as |
| 6 | + * forward. This implementation checks this mathematically by reversing the number |
| 7 | + * and comparing it to the original. |
| 8 | + * |
| 9 | + * ### Examples |
| 10 | + * |
| 11 | + * 1. `isPalindrome(121)` |
| 12 | + * - Original: 121 |
| 13 | + * - Loop 1: remainder = 1, reversedNumber = 1, number = 12 |
| 14 | + * - Loop 2: remainder = 2, reversedNumber = 12, number = 1 |
| 15 | + * - Loop 3: remainder = 1, reversedNumber = 121, number = 0 |
| 16 | + * - Final Check: 121 == 121 -> `true` |
| 17 | + * |
| 18 | + * 2. `isPalindrome(123)` |
| 19 | + * - Original: 123 |
| 20 | + * - Loop 1: remainder = 3, reversedNumber = 3, number = 12 |
| 21 | + * - Loop 2: remainder = 2, reversedNumber = 32, number = 1 |
| 22 | + * - Loop 3: remainder = 1, reversedNumber = 321, number = 0 |
| 23 | + * - Final Check: 123 == 321 -> `false` |
| 24 | + * |
5 | 25 | * @see project_euler/problem_4/sol1.c |
6 | 26 | */ |
7 | | -#include <assert.h> |
8 | | -#include <stdbool.h> |
| 27 | +#include <assert.h> /// for assert() |
| 28 | +#include <stdbool.h> /// for bool |
9 | 29 | #include <stdio.h> |
10 | 30 |
|
11 | 31 | bool isPalindrome(int number); |
12 | 32 |
|
13 | 33 | /** Driver Code */ |
14 | | -int main() |
15 | | -{ |
16 | | - assert(isPalindrome(0)); |
17 | | - assert(isPalindrome(1)); |
18 | | - assert(isPalindrome(12321)); |
19 | | - assert(!isPalindrome(1234)); |
| 34 | +int main() { |
| 35 | + // assert() checks if the expression is true. If it's false, the program |
| 36 | + // will terminate. These are self-tests. |
| 37 | + assert(isPalindrome(0)); // 0 is a palindrome |
| 38 | + assert(isPalindrome(1)); // Single digits are palindromes |
| 39 | + assert(isPalindrome(12321)); // A standard palindrome |
| 40 | + assert(!isPalindrome(1234)); // A standard non-palindrome |
| 41 | + // Note: This implementation doesn't correctly handle negative numbers. |
| 42 | + // e.g., isPalindrome(-121) would return false, as originalNumber (-121) |
| 43 | + // would not equal reversedNumber (-121) because the loop doesn't run. |
20 | 44 | return 0; |
21 | 45 | } |
22 | 46 |
|
23 | 47 | /** |
24 | | - * Check given number whether is palindrome number or not |
25 | | - * @param number number to check |
26 | | - * @return `true` if given number is palindrome number |
27 | | - * @return `false` if number is not a palindrome number |
| 48 | + * Check given number whether is palindrome number or not. |
| 49 | + * @param number The integer to check. |
| 50 | + * @return `true` if the given number is a palindrome. |
| 51 | + * @return `false` if the given number is not a palindrome. |
28 | 52 | */ |
29 | | -bool isPalindrome(int number) |
30 | | -{ |
| 53 | +bool isPalindrome(int number) { |
31 | 54 | int reversedNumber = 0; |
32 | | - int originalNumber = number; |
33 | | - while (number != 0) |
34 | | - { |
| 55 | + int originalNumber = number; // Store the original number for later comparison |
| 56 | + |
| 57 | + // Rebuild the number in reverse |
| 58 | + // Loop continues as long as there are digits left (number is not 0) |
| 59 | + while (number != 0) { |
| 60 | + // Get the last digit of the number |
35 | 61 | int remainder = number % 10; |
| 62 | + |
| 63 | + // Append the last digit to the reversedNumber |
| 64 | + // (e.g., if reversedNumber = 12 and remainder = 3, it becomes 120 + 3 = 123) |
36 | 65 | reversedNumber = reversedNumber * 10 + remainder; |
| 66 | + |
| 67 | + // Remove the last digit from the number using integer division |
| 68 | + // (e.g., 123 / 10 = 12) |
37 | 69 | number /= 10; |
38 | 70 | } |
| 71 | + |
| 72 | + // A number is a palindrome if its original value equals its reversed value |
39 | 73 | return originalNumber == reversedNumber; |
40 | 74 | } |
0 commit comments