水仙花数的意思是说一个三位数的百位、十位、个位各自求立方后再求和等于这个三位数:153=1^3+5^3+3^3。现在问题来了:请写出一段Python程序求出100-999之间的所有水仙花数。

整合了一下网上的答案并结合自己的思考和实践,方法大致有三:

1.将百位、十位、个位的数字分别设置为变量:

for i in range(1,10):
     for j in range(0,10):
          for k in range(0,10):
                if i*100+j*10+k==i**3+j**3+k**3:
                   print (i*100+j*10+k,'是水仙花数')

这个办法感觉比较low,但是能实现,哈

2.反过来,将三位数本身设置为变量,运用地板除法和求余数法得出百位、十位和个位数字:

for flower in range(100,1000):
    a = flower//100     #百位数字是flower除以100,然后向下取整
    b = flower//10%10   #十位数字是flower除以10,向下取整然后再除以10取余
    c = flower%10       #个位数字是flower除以10再取余
    if flower == a**3+b**3+c**3:
        print(flower)

说实话,小学老师真没教过地板除法和求余法,关键是一学到余数就开始学小数点和分数了啊,没人告诉我余数居然这么有用,哭/(ㄒoㄒ)/~~

3.第三种方法对我这种菜鸟来说有点难理解,就是第二种方法的升级版(加入了循环):

for i in range(100,1000):
    sum=0
    temp=i
    while temp:
        sum=sum+(temp%10)**3  #这个循环比较难理解,根本上还是取余和地板除
        temp//=10
    if sum == i:
        print(i)

反正我目前就以第二种方法为重吧。。

菜鸟继续学习中。。

更多推荐

菜鸟学Python之求水仙花数