背景介绍
实现一个算法求一个数字的数根。介绍如下:
class Solution(object):
def add_digits(self, val):
''' 补充代码 '''
- 将一正整数的各个位数相加(即横向相加)后,若加完后的值大于等于 10 的话,则继续将各位数进行横向相加直到其值小于 10 为止所得到的数,即为数根。
- 例如对于数字
567
,就要依次计算5+6+7=18
,1+8=9
,所以567
的数根为9
。 -
挑战步骤
本次挑战中,你需要在
digits.py
文件中补充类Solution
的空缺部分。 Solution
中的add_digits
方法用于求一个数字的数根。add_digits
函数的参数val
用于指定传入的数字。add_digits
函数需要返回找到的数根。- 如果传入的
val
为None
,需要使用raise
语句抛出TypeError
异常。 - 如果传入的
val
为负数,需要使用raise
语句抛出ValueError
异常。 - 请完善下面的代码:
要求规定
- 本次挑战必须使用 Python 3 实现。
- 请勿修改现有代码。
- 文件路径为
/home/project/digits.py
。 - 代码必须写入
digits.py
文件中,且不能修改示例代码中出现的类名和函数名。 - 最终实现效果:
- 当 val 为 567,则 add_digits 函数返回 9。
- 当 val 为 2021,则 add_digits 函数返回 5。
def getSum(val):
sum = 0
while val > 0:
sum = sum + val % 10
val = val // 10
return sum
class Solution(object):
def add_digits(self, val):
if val == None:
raise TypeError
elif val < 0:
raise ValueError
else:
while getSum(val) >= 10:
val = getSum(val)
return getSum(val)
if __name__ == '__main__':
n = int(input())
s = Solution()
print(s.add_digits(val=n))