Python 数字和
我需要写一个计算一个数字的数字和的代码,这就是问题的确切文本:一个数字n的数字和是它的数字和。编写一个递归函数digitalSum(n),该函数接受正整数n并返回其数字和。例如,digitalSum(2019)应该返回12,因为2+0+1+9=12。这是我写的代码:Python 数字和,python,python-3.x,Python,Python 3.x,我需要写一个计算一个数字的数字和的代码,这就是问题的确切文本:一个数字n的数字和是它的数字和。编写一个递归函数digitalSum(n),该函数接受正整数n并返回其数字和。例如,digitalSum(2019)应该返回12,因为2+0+1+9=12。这是我写的代码: def digitalSum(n): L=[] if n < 10: return n else: S=str(n) for i in S: L.app
def digitalSum(n):
L=[]
if n < 10:
return n
else:
S=str(n)
for i in S:
L.append(int(i))
return sum(L)
def digitalSum(n):
L=[]
如果n<10:
返回n
其他:
S=str(n)
对于S中的i:
L.附加(int(i))
回报总额(L)
这些代码工作正常,但它不是递归函数,我不允许将任何int更改为str。您能帮我吗?一些提示:
def digitalSum(n):
def过程(n,总和):
如果n<10:
返回和+n
返回过程(n/10,总和+n%10)
返回过程(n,0)
这可能有点太多了,但即使是在学习环境中,也可以获得一个答案
我的解决方案比一些更冗长,但它对a更友好,我认为这是一个特性。这是一个家庭作业,所以我没有编写太多代码。递归可按以下方式使用:
- 获取第一个(或最后一个)数字
- 将其余部分格式化为较短的数字
- 将数字和较短数字的数字和相加(递归!)
def digitalSum(n):
if n < 10 :
return n
return n % 10 + digitalSum( n // 10 )
def digitalSum(n):
如果n<10:
返回n
其他:
返回???
第一部分来自您现有的代码。
这个是你需要锻炼的部分。它可以从n
中去掉一个数字,并将其添加到剩余数字的数字和中
您实际上不需要
else
,但我把它放在那里了,所以代码结构看起来是一样的这更像是一个与算法相关的问题
以下是你的答案:
def digit_sum(a):
if a == 0:
return 0
return a % 10 + digit_sum(a/10)
如果您不理解它的工作原理,请告诉我,我将提供解释。def digital\u sum(数字):
如果数字小于10:
返回号码
其他:
返回编号%10+数字和(编号/10)
def drs\u f(p):
你仍然可以在O(log10N)中完成…取消所有加在9上的数字,如果没有数字,9是答案,否则将所有遗漏的数字相加
def rec_sum_Reduce(n):
ans=0
对于映射中的i(int,str(n)):
ans=1+(ans+i-1)%9
返回ANS/代码> 我认为我的解决方案更优雅;在没有解释的情况下发布代码片段并不是回答家庭作业问题的最佳方式。考虑到阅读,我会在未来更加有帮助,虽然有这么一小段代码,没有什么可说的。非常感谢!现在我明白了。把它升级到Python3,它就成功了,但我不明白什么是数字和(a//10),它似乎是数字和(n//10)!=n//10,那么digitalSum()是什么?请给出完整答案,而不仅仅是没有解释的代码答案。
def sumofdigits(a):
a = str(a)
a = list(a)
b = []
for i in a:
b.append(int(i))
b = sum(b)
if b > 9:
return sumofdigits(b)
else:
return b
print sumofdigits(5487123456789087654)
def digitalSum(n):
if n < 10:
return n
else:
return ???
def digit_sum(a):
if a == 0:
return 0
return a % 10 + digit_sum(a/10)
drs = sum([int (q) for q in str(p)])
while drs >= 10:
drs = sum([int(q) for q in str(drs)])
return drs
def sumofdigits(a):
a = str(a)
a = list(a)
b = []
for i in a:
b.append(int(i))
b = sum(b)
if b > 9:
return sumofdigits(b)
else:
return b
print sumofdigits(5487123456789087654)