From be65e47b546f0b69ae3a73f59ec7ff8f33bb79f0 Mon Sep 17 00:00:00 2001 From: Nefelibata <124799179+MeiSiristhebest@users.noreply.github.com> Date: Sun, 13 Sep 2026 19:38:39 +0800 Subject: [PATCH] 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 --- maths/digital_root.py | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 maths/digital_root.py diff --git a/maths/digital_root.py b/maths/digital_root.py new file mode 100644 index 000000000..bb809c98b --- /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()