菜鸟学Python之求水仙花数

水仙花数的意思是说一个三位数的百位、十位、个位各自求立方后再求和等于这个三位数: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)

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

菜鸟继续学习中。。

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值