Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions maths/digital_root.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from __future__ import annotations

"""
Digital Root.
The digital root (also known as the repeated digital sum) of a non-negative
integer is the (single digit) value obtained by an iterative process of summing
digits: on each iteration the digits of the previous result are summed, and the
process continues until a single-digit number is reached.

For more information see:
https://en.wikipedia.org/wiki/Digital_root
"""


def digital_root(number: int) -> int:
"""
Return the digital root of a non-negative integer number.

The digital root is the single-digit value obtained by repeatedly summing
the decimal digits of number until only one digit remains. The input is taken by
its absolute value, so negative numbers behave like their positive
counterpart.

>>> digital_root(0)
0
>>> digital_root(9)
9
>>> digital_root(38)
2
>>> digital_root(12345)
6
>>> digital_root(-45)
9
>>> digital_root(999999999999)
9
"""
number = abs(number)
while number >= 10:
number = sum(int(digit) for digit in str(number))
return number


if __name__ == "__main__":
import doctest

doctest.testmod()