什么是水仙花数?
水仙花数,是指这个数字每一位上的数字的立方之和等于这个数。比如,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
- temp= i = 153 第一次进入while循环,主要temp不为零,就会一直执行循环。
- temp%10 = 3,实际上求出了个位数,并将个位数的立方赋值给sum。
- temp // 10 = 15, 地板除法,实际上去掉了个位数,留下百位和十位的数字。此时temp不为0,继续while循环
- temp%10 = 15 %10 = 5,实际上求出了十位数,再将十位数的立方累加到sum里面。
- temp // 10 = 1,去掉十位数,只剩下百位数了,此时temp仍然不为0,循环继续
- temp%10 = 1%10 = 1 ,这就是百位数的数字了,将1的立方加累加到sum里面。
- temp // 10 = 0 = temp,temp终于为0了,while条件判断为false,退出while循环,执行下面的if语句
- 发现,当i = 153的时候,sum 正好和 i 相等呢,于是把 i 打印出来啦!
反思
- 编程的世界真的挺好玩的,虽然中心思想都是通过循环求出各个位数的值,但是硬求和巧妙地求,差别真的太大
- 还算是要多思考、多练习、多总结
开心
- 刚刚开始学习Python没多久,任重而道远
- 希望在这儿把有趣问题的思考过程记录下来
- 新手思维还不够开阔,不喜勿喷,文明交流哦
- 原谅我有一颗钢化玻璃心!