Python - 计算任一输入的正整数的各位数字的和

最近在看数据结构,遇到这个练习题,一开始觉得很简单,后来一想正整数不确定,位数多了用常规做法有点复杂。看了看网上的做法,用了递归的算法,上代码:

#coding:utf-8
import math
#首先判断几位数
def diGit(n):
a = n
c = 0
while a != 0:
a = a / 10
c += 1
return c 
def sumDigits(n):
c = diGit(n)              #判断几位数
if n < 10:
return n 
else:
l = int(n / math.pow(10, c -1))    #取最高位
#print l 
y = int(n - l * math.pow(10, c-1)) #取最高位后剩余
#print j 
n = l + sumDigits(y)
return n 
def main():
i = int(raw_input(unicode('请输入任意整数','utf-8').encode('gbk')))
sum = sumDigits(i) 
print sum 
main()
————————————————
版权声明:本文为CSDN博主「gungun_changjiang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gungun_changjiang/article/details/80705742

还是觉得有点复杂。。。。。。
翻了翻前面的知识点,看到这么一句话:数据结构的存储结构会影响算法的好坏。于是就换了一个思路:把这个正整数当成一个字符串来处理。具体代码如下:

#计算任一输入的正整数的各位数字之和
n = input("请输入一个正整数:")   #将数字作为字符串输入
list = list(n)   #将字符串转换为列表
sum = 0
for i in range(len(list)):
    sum += int(list[i])   #将字符转换为整数型,并累加列表中的每个数字

print(sum)

运行结果:

请输入一个正整数:7453423432
37

Process finished with exit code 0

是不是看起来简单多了,看来有时候要换个思路解决问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。