打印水仙花数,其各位数字立方和等于该数本身

打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

用python方法实现

看到题目很快能想到用三层for循环,但再想想,觉得是不是并不需要所有数都判断,比如9的三次方和9的三次方之和已经超过1000了,不可能是水仙花数。

如何进行排除呢?一开始是想百位数、十位数、个位数任意两个立方和大于1000就break,但个位数一直在0-9循环,这样会漏掉一些数。但百位是递增的,十位在进位之前也是一直递增的,所以判断前两位之和就可以了,例如970之后的29个数字都可以不用考虑了

代码如下

for i in range(1,10):
    for j in range(0,10):
        for k in range(0,10):
            # 减小计算数量
            if j**3 + i**3 >= 1000:
                break
            if i**3+ j**3+ k**3 == i*100 + j*10 + k:
                print(str(i**3+ j**3+ k**3))

你可能感兴趣的:(python练习题,pycharm)