Skip to content

Commit bd64a0b

Browse files
authored
Add function to check if a number is a palindrome
This function checks if a given integer is a palindrome without converting it to a string. It handles edge cases for negative numbers and numbers ending in zero.
1 parent 840ca00 commit bd64a0b

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

maths/palindrome_number.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
def is_palindrome(number: int) -> bool:
2+
"""
3+
Determines if an integer is a palindrome without using string conversion.
4+
5+
Logic:
6+
1. Negative numbers are not palindromes.
7+
2. Numbers ending in 0 (except 0 itself) are not palindromes.
8+
3. Reverse half of the number and compare.
9+
10+
Examples:
11+
>>> is_palindrome(121)
12+
True
13+
>>> is_palindrome(12321)
14+
True
15+
>>> is_palindrome(10)
16+
False
17+
>>> is_palindrome(-121)
18+
False
19+
>>> is_palindrome(0)
20+
True
21+
>>> is_palindrome(1)
22+
True
23+
>>> is_palindrome(1221)
24+
True
25+
>>> is_palindrome(123)
26+
False
27+
"""
28+
29+
# Edge cases
30+
if number < 0 or (number % 10 == 0 and number != 0):
31+
return False
32+
33+
reversed_half = 0
34+
35+
# Reverse half of the digits
36+
while number > reversed_half:
37+
reversed_half = reversed_half * 10 + number % 10
38+
number //= 10
39+
40+
# Check for even and odd length numbers
41+
return number == reversed_half or number == reversed_half // 10

0 commit comments

Comments
 (0)