Skip to content

Commit 15c2bac

Browse files
committed
Fix Kaprekar logic to exclude powers of 10; add passing tests
1 parent bca915d commit 15c2bac

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

maths/special_numbers/kaprekar_number.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import math
2+
13
def is_kaprekar_number(n: int) -> bool:
24
"""
35
Determine whether a number is a Kaprekar number (excluding powers of 10).
@@ -24,10 +26,10 @@ def is_kaprekar_number(n: int) -> bool:
2426
"""
2527
if n == 1:
2628
return True
27-
if n <= 0 or (n % 10 == 0 and n == 10 ** len(str(n))):
28-
return False # Disallow powers of 10 (e.g., 10, 100)
29+
if n <= 0 or math.log10(n).is_integer():
30+
return False # Disallow powers of 10 (e.g., 10, 100, 1000)
2931

30-
square = str(n**2)
32+
square = str(n ** 2)
3133
for i in range(1, len(square)):
3234
left, right = square[:i], square[i:]
3335
if n == int(left or "0") + int(right):
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from maths.special_numbers.kaprekar_number import is_kaprekar_number
2+
3+
def test_kaprekar_numbers():
4+
assert is_kaprekar_number(1) is True
5+
assert is_kaprekar_number(9) is True
6+
assert is_kaprekar_number(45) is True
7+
assert is_kaprekar_number(55) is True
8+
assert is_kaprekar_number(99) is True
9+
assert is_kaprekar_number(297) is True
10+
11+
def test_non_kaprekar_numbers():
12+
assert is_kaprekar_number(10) is False # Power of 10
13+
assert is_kaprekar_number(100) is False # Power of 10
14+
assert is_kaprekar_number(3) is False
15+
assert is_kaprekar_number(50) is False
16+
assert is_kaprekar_number(0) is False
17+
assert is_kaprekar_number(-45) is False

0 commit comments

Comments
 (0)