Skip to content

Commit 1cd5280

Browse files
Merge pull request #1 from ITZ-NIHALPATEL/ITZ-NIHALPATEL-patch-1
Add palindrome checking function in Rust
2 parents 7763020 + 114c543 commit 1cd5280

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

src/math/palindrome.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/// A palindrome number is a number that reads the same backward as forward.
2+
/// For example, 121 is a palindrome, but 123 is not.
3+
/// This function checks if a given unsigned 64-bit integer 'number' is a palindrome
4+
/// by mathematically reversing its digits and comparing it to the original.
5+
/// Note: By this definition, negative numbers are not considered palindromes.
6+
7+
pub fn is_palindrome(number: u64) -> bool {
8+
// A single-digit number is always a palindrome
9+
if number < 10 {
10+
return true;
11+
}
12+
13+
let original_number = number;
14+
let mut reversed_number: u64 = 0;
15+
let mut n = number;
16+
17+
// Loop until all digits of n have been processed
18+
while n > 0 {
19+
// Get the last digit
20+
let remainder = n % 10;
21+
22+
// Build the reversed number
23+
reversed_number = (reversed_number * 10) + remainder;
24+
25+
// Remove the last digit
26+
n /= 10;
27+
}
28+
29+
// Check if the original number equals its reversed version
30+
original_number == reversed_number
31+
}
32+
33+
#[cfg(test)]
34+
mod tests {
35+
use super::*;
36+
37+
#[test]
38+
fn standard_palindrome() {
39+
assert_eq!(true, is_palindrome(121));
40+
}
41+
42+
#[test]
43+
fn standard_non_palindrome() {
44+
assert_eq!(false, is_palindrome(123));
45+
}
46+
47+
#[test]
48+
fn single_digit() {
49+
// Single digits are always palindromes
50+
assert_eq!(true, is_palindrome(7));
51+
}
52+
53+
#[test]
54+
fn zero() {
55+
// Zero is a palindrome
56+
assert_eq!(true, is_palindrome(0));
57+
}
58+
59+
#[test]
60+
fn large_palindrome() {
61+
assert_eq!(true, is_palindrome(123454321));
62+
}
63+
64+
#[test]
65+
fn number_ending_in_zero() {
66+
// No number > 0 that ends in 0 can be a palindrome
67+
assert_eq!(false, is_palindrome(120));
68+
}
69+
}

0 commit comments

Comments
 (0)