mirror of
https://github.com/TheAlgorithms/Python.git
synced 2026-09-28 21:45:27 +08:00
Add Digital Root algorithm to maths (#14988)
* Add digital root algorithm * refactor: use descriptive parameter name `number` instead of `n` (algorithms-keeper) Also see: project_euler/problem_092/sol1.py
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user