Skip to content

Commit 5723819

Browse files
Merge pull request #1 from ITZ-NIHALPATEL/ITZ-NIHALPATEL-patch-1
Enhance documentation and assertions in palindrome.c
2 parents e5dad3f + 165e44c commit 5723819

File tree

1 file changed

+52
-18
lines changed

1 file changed

+52
-18
lines changed

math/palindrome.c

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,74 @@
11
/**
22
* @file
3-
* @brief Program to identify if a number is [palindrome
3+
* @brief Program to identify if a number is a [palindrome
44
* 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+
*
525
* @see project_euler/problem_4/sol1.c
626
*/
7-
#include <assert.h>
8-
#include <stdbool.h>
27+
#include <assert.h> /// for assert()
28+
#include <stdbool.h> /// for bool
929
#include <stdio.h>
1030

1131
bool isPalindrome(int number);
1232

1333
/** 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.
2044
return 0;
2145
}
2246

2347
/**
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.
2852
*/
29-
bool isPalindrome(int number)
30-
{
53+
bool isPalindrome(int number) {
3154
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
3561
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)
3665
reversedNumber = reversedNumber * 10 + remainder;
66+
67+
// Remove the last digit from the number using integer division
68+
// (e.g., 123 / 10 = 12)
3769
number /= 10;
3870
}
71+
72+
// A number is a palindrome if its original value equals its reversed value
3973
return originalNumber == reversedNumber;
4074
}

0 commit comments

Comments
 (0)