对给定范围内的水仙花数的代码展示

题目详情
“水仙花数”的概念:指一个三位数,它的各个位上数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在 m 和 n 范围内的水仙花数

题目拓展
对于水仙花数来说是三位数,如果对于N多位数来说,那就是N位水仙花数了,那该如何去求解呢?
本次代码也主要是对N位水仙花数的展示

解题思路
对数字进行位数分离,存放在列表 list_i = [] ,
迭代列表的每个元素并对其求立方和,得出 sum
判断 sum 是否与该数相等,相等则添加至列表 list_daffodil = []

def daffodil(m, n):
    list_daffodil = []

    for j in range(m, n+1):
        i = j
        list_i = []
        while i:#对m分别取出每一位数,放在 list_i 的列表里
            list_i.append( i%10 )
            i = int(i/10)

        sum = 0#开始求立方和
        for a in list_i:
            sum = sum + pow(a, 3)

        if j == sum:
            list_daffodil.append( j )

    return list_daffodil

运行结果

>>> daffodil(370, 375)
[370, 371]
>>> daffodil(370, 380)
[370, 371]
>>> daffodil(370, 3750)
[370, 371, 407]
>>> daffodil(100, 3750)
[153, 370, 371, 407]
>>> daffodil(100, 375000)
[153, 370, 371, 407]
>>> 

对于后面的两组数据,结果虽然是一样的,但是在运行的时候,后者因为范围更大,数据更多,算出结果的时间明显增加了许多。
所以在想,在后面的知识积累后,是否有更高效的代替方法来实现相同的功能,现在的程序代码都在追求着速度,运行较慢的话应该会被淘汰。

参考资料
牛客网,2017校招真题在线编程,水仙花数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值