最近在看数据结构,遇到这个练习题,一开始觉得很简单,后来一想正整数不确定,位数多了用常规做法有点复杂。看了看网上的做法,用了递归的算法,上代码:
#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
是不是看起来简单多了,看来有时候要换个思路解决问题。