Python3求100-1000之间的水仙花数

什么是水仙花数?

水仙花数,是指这个数字每一位上的数字的立方之和等于这个数。比如,153 = 1^3 + 5^3 + 3^3 ,那么153就是一个水仙花数。

思路:

可以分别求出某个数 i 每一位上的数字,求各个位数的立方之和sum,判断sum与 i 是否相等。

实现

练手的时候想到的

import math

for i in range(100, 1000):
    
    hundreds = int(i/100)
    tens_digit = int((i-100*hundreds)/10)
    single_digit = int(i-100*hundreds - 10*tens_digit)
    
    if i == (math.pow(hundreds, 3) + math.pow(tens_digit, 3) + math.pow(single_digit,3)):
        print(i,end = ' ')
    else:
        i += 1

结果是:

153 370 371 407 

其实有更简单的方法,刚开始的时候看不懂o(╥﹏╥)o

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10
    if sum == i:
            print(i)

分析一下
主要是解释一下while循环里面的内容:
还是拿153这个水仙花数为例,假设此时 i= 153,temp = 1

  1. temp= i = 153 第一次进入while循环,主要temp不为零,就会一直执行循环。
  2. temp%10 = 3,实际上求出了个位数,并将个位数的立方赋值给sum。
  3. temp // 10 = 15, 地板除法,实际上去掉了个位数,留下百位和十位的数字。此时temp不为0,继续while循环
  4. temp%10 = 15 %10 = 5,实际上求出了十位数,再将十位数的立方累加到sum里面。
  5. temp // 10 = 1,去掉十位数,只剩下百位数了,此时temp仍然不为0,循环继续
  6. temp%10 = 1%10 = 1 ,这就是百位数的数字了,将1的立方加累加到sum里面。
  7. temp // 10 = 0 = temp,temp终于为0了,while条件判断为false,退出while循环,执行下面的if语句
  8. 发现,当i = 153的时候,sum 正好和 i 相等呢,于是把 i 打印出来啦!

反思

  • 编程的世界真的挺好玩的,虽然中心思想都是通过循环求出各个位数的值,但是硬求和巧妙地求,差别真的太大
  • 还算是要多思考、多练习、多总结

开心

  • 刚刚开始学习Python没多久,任重而道远
  • 希望在这儿把有趣问题的思考过程记录下来
  • 新手思维还不够开阔,不喜勿喷,文明交流哦
  • 原谅我有一颗钢化玻璃心!

猜你喜欢

转载自blog.csdn.net/Haoyu_xie/article/details/105833175