我正在尝试编写一个函数来重复添加给定数字的数字,直到我有一个数字。
所以addDigits(345)= 12,1 + 2 = 3,所以这应该返回3
这是我的尝试:
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
if (num >= 0 and num < 10):
return num
else:
total = 0
while (num >= 10):
total += (num % 10)
num /= 10
total += num
self.addDigits(total)
在输入10上,我得到了null,我不知道为什么。我已经跟踪了代码,它看起来对我来说......
答案 0 :(得分:2)
旧技术&#34;铸造9&#34;给出了快速回答
def sumOfDigits(x):
if x == 0: return 0
y = x % 9
return 9 if y == 0 else y
一个例子说明了为什么会这样:
433 = 4 *(99 + 1)+ 3 *(9 + 1)+2 = 4 * 99 + 3 * 9 +(4 + 3 + 3)
还原模9给出(4 + 3 + 3)(mod 9)
正如安德里亚在下面的评论指出的那样,当数字的总和与9一致时,这给出了错误的答案。
答案 1 :(得分:1)
以下是一种将您的号码拆分为单个数字的方法,并将它们连续求和,直到您得到一位数字。
total = 12348736
while len(str(total)) > 1:
total = sum(map(int,str(total)))
print total
编辑:只是进一步解释:
str(12348736)
:将您的号码变成字符串map(int, '12348736')
:
将您的字符串(字符列表)转换为整数列表(将int
应用于每个字符)sum([1, 2, 3, 4, 8, 7, 3, 6])
:加起来
列表中的所有数字