diff --git a/maths/digital_root.py b/maths/digital_root.py new file mode 100644 index 000000000000..bb809c98bd35 --- /dev/null +++ b/maths/digital_root.py @@ -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()