Skip to content

Commit 76bba30

Browse files
maths: Add digital root algorithm implementation
1 parent adccf0c commit 76bba30

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

‎maths/digital_root.py‎

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
def digital_root(number: int) -> int:
1616
"""
17-
Return the digital root of a non-negative integer number.
17+
Return the digital root of a non-negative integer.
1818
1919
The digital root is the single-digit value obtained by repeatedly summing
20-
the decimal digits of number until only one digit remains. The input is taken by
21-
its absolute value, so negative numbers behave like their positive
22-
counterpart.
20+
the decimal digits of ``number`` until only one digit remains. Zero has a
21+
digital root of zero. The input must be an integer greater than or equal to
22+
zero.
23+
24+
See https://en.wikipedia.org/wiki/Digital_root for more information.
2325
2426
>>> digital_root(0)
2527
0
@@ -29,12 +31,22 @@ def digital_root(number: int) -> int:
2931
2
3032
>>> digital_root(12345)
3133
6
32-
>>> digital_root(-45)
33-
9
3434
>>> digital_root(999999999999)
3535
9
36+
>>> digital_root(-1)
37+
Traceback (most recent call last):
38+
...
39+
ValueError: number must be non-negative
40+
>>> digital_root(1.5)
41+
Traceback (most recent call last):
42+
...
43+
TypeError: number must be an integer
3644
"""
37-
number = abs(number)
45+
if not isinstance(number, int):
46+
raise TypeError("number must be an integer")
47+
if number < 0:
48+
raise ValueError("number must be non-negative")
49+
3850
while number >= 10:
3951
number = sum(int(digit) for digit in str(number))
4052
return number

0 commit comments

Comments
 (0)