From bd64a0b7e9691fc8415db717bdd0af3f7b3be3d8 Mon Sep 17 00:00:00 2001 From: Yaswanth Naga Sai K <140506928+YASWANTH1976@users.noreply.github.com> Date: Sun, 5 Apr 2026 21:17:37 +0530 Subject: [PATCH] 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. --- maths/palindrome_number.py | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 maths/palindrome_number.py diff --git a/maths/palindrome_number.py b/maths/palindrome_number.py new file mode 100644 index 000000000000..21acd9b193aa --- /dev/null +++ b/maths/palindrome_number.py @@ -0,0 +1,41 @@ +def is_palindrome(number: int) -> bool: + """ + Determines if an integer is a palindrome without using string conversion. + + Logic: + 1. Negative numbers are not palindromes. + 2. Numbers ending in 0 (except 0 itself) are not palindromes. + 3. Reverse half of the number and compare. + + Examples: + >>> is_palindrome(121) + True + >>> is_palindrome(12321) + True + >>> is_palindrome(10) + False + >>> is_palindrome(-121) + False + >>> is_palindrome(0) + True + >>> is_palindrome(1) + True + >>> is_palindrome(1221) + True + >>> is_palindrome(123) + False + """ + + # Edge cases + if number < 0 or (number % 10 == 0 and number != 0): + return False + + reversed_half = 0 + + # Reverse half of the digits + while number > reversed_half: + reversed_half = reversed_half * 10 + number % 10 + number //= 10 + + # Check for even and odd length numbers + return number == reversed_half or number == reversed_half // 10