From 0340eaafe39e8d16630a9d340a9d72acbffe4db4 Mon Sep 17 00:00:00 2001 From: Yaswanth Naga Sai K <140506928+YASWANTH1976@users.noreply.github.com> Date: Sat, 3 Jan 2026 11:12:46 +0530 Subject: [PATCH 1/3] Add palindrome number checker with user input Adds a simple Python implementation to check whether a number is a palindrome using user input. --- maths/palindrome_number.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 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..1c85ea4a5442 --- /dev/null +++ b/maths/palindrome_number.py @@ -0,0 +1,27 @@ +def is_palindrome(number: int) -> bool: + """ + Check whether a given integer is a palindrome. + + A palindrome number reads the same forwards and backwards. + + Examples: + >>> is_palindrome(121) + True + >>> is_palindrome(123) + False + """ + number_str = str(number) + return number_str == number_str[::-1] + + +if __name__ == "__main__": + user_input = input("Enter a number: ").strip() + + if user_input.isdigit(): + number = int(user_input) + if is_palindrome(number): + print("The number is a palindrome.") + else: + print("The number is not a palindrome.") + else: + print("Please enter a valid non-negative integer.") From b1779c501a0f3cc0608d73313a6ccec1b15f2a48 Mon Sep 17 00:00:00 2001 From: Yaswanth Naga Sai K <140506928+YASWANTH1976@users.noreply.github.com> Date: Wed, 7 Jan 2026 09:13:41 +0530 Subject: [PATCH 2/3] Refactor is_palindrome function for efficiency Refactor palindrome check to avoid string conversion and improve logic. --- maths/palindrome_number.py | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/maths/palindrome_number.py b/maths/palindrome_number.py index 1c85ea4a5442..7ab3b0f98bee 100644 --- a/maths/palindrome_number.py +++ b/maths/palindrome_number.py @@ -1,27 +1,18 @@ def is_palindrome(number: int) -> bool: """ - Check whether a given integer is a palindrome. + Determines if an integer is a palindrome without string conversion. - A palindrome number reads the same forwards and backwards. - - Examples: - >>> is_palindrome(121) - True - >>> is_palindrome(123) - False + Logic: + 1. Filter out negative numbers and multiples of 10. + 2. Reverse the second half of the number. + 3. Compare the two halves. """ - number_str = str(number) - return number_str == number_str[::-1] - + if number < 0 or (number % 10 == 0 and number != 0): + return False -if __name__ == "__main__": - user_input = input("Enter a number: ").strip() + reversed_half = 0 + while number > reversed_half: + reversed_half = (reversed_half * 10) + (number % 10) + number //= 10 - if user_input.isdigit(): - number = int(user_input) - if is_palindrome(number): - print("The number is a palindrome.") - else: - print("The number is not a palindrome.") - else: - print("Please enter a valid non-negative integer.") + return number == reversed_half or number == reversed_half // 10 From 12bcdb858f58a5b0727c64cab9262ee70a43650a Mon Sep 17 00:00:00 2001 From: Yaswanth Naga Sai K <140506928+YASWANTH1976@users.noreply.github.com> Date: Wed, 7 Jan 2026 09:22:00 +0530 Subject: [PATCH 3/3] Refactor palindrome check to O(1) space mathematical approach --- maths/palindrome_number.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/maths/palindrome_number.py b/maths/palindrome_number.py index 7ab3b0f98bee..2febb6fafd30 100644 --- a/maths/palindrome_number.py +++ b/maths/palindrome_number.py @@ -1,11 +1,23 @@ def is_palindrome(number: int) -> bool: """ - Determines if an integer is a palindrome without string conversion. + Determines if an integer is a palindrome without using string conversion. Logic: - 1. Filter out negative numbers and multiples of 10. - 2. Reverse the second half of the number. - 3. Compare the two halves. + 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 """ if number < 0 or (number % 10 == 0 and number != 0): return False