mirror of
https://github.com/TheAlgorithms/Python.git
synced 2026-09-29 05:53:07 +08:00
* Add digital root algorithm * refactor: use descriptive parameter name `number` instead of `n` (algorithms-keeper) Also see: project_euler/problem_092/sol1.py
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
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()
|