From a56cb1175a752d2bd6dda36e95f9445158ad9870 Mon Sep 17 00:00:00 2001 From: fze Date: Sun, 31 May 2026 16:25:30 +0800 Subject: [PATCH] Fix digit count for powers of ten --- maths/number_of_digits.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/maths/number_of_digits.py b/maths/number_of_digits.py index bb9c0d248fd1..271a4249cdb3 100644 --- a/maths/number_of_digits.py +++ b/maths/number_of_digits.py @@ -44,13 +44,17 @@ def num_digits_fast(n: int) -> int: 5 >>> num_digits_fast(123) 3 + >>> num_digits_fast(1000) + 4 + >>> num_digits_fast(10**15) + 16 >>> num_digits_fast(0) 1 >>> num_digits_fast(-1) 1 >>> num_digits_fast(-123456) 6 - >>> num_digits('123') # Raises a TypeError for non-integer input + >>> num_digits_fast('123') # Raises a TypeError for non-integer input Traceback (most recent call last): ... TypeError: Input must be an integer @@ -59,7 +63,12 @@ def num_digits_fast(n: int) -> int: if not isinstance(n, int): raise TypeError("Input must be an integer") - return 1 if n == 0 else math.floor(math.log(abs(n), 10) + 1) + if n == 0: + return 1 + + abs_n = abs(n) + digits = math.floor(math.log10(abs_n)) + 1 + return digits + 1 if 10**digits <= abs_n else digits def num_digits_faster(n: int) -> int: @@ -77,7 +86,7 @@ def num_digits_faster(n: int) -> int: 1 >>> num_digits_faster(-123456) 6 - >>> num_digits('123') # Raises a TypeError for non-integer input + >>> num_digits_faster('123') # Raises a TypeError for non-integer input Traceback (most recent call last): ... TypeError: Input must be an integer