Python 用while()判断并输出1000以内(或10000以内)的水仙花数
什么是水仙花数:水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)
思路解析
- 判断这个数的位数是否是3位以上。(如果是1000以内的数字,问题比较简单,可以直接判断是否≥100;如果要判断的数还包括4位的,那还需要判断数字的位数,可以考虑用循环来做)
- 判断这个数各个位上的数字。(我认为这个是这个题的核心点)
- 各位上的数字的n次幂的和的计算。(循环)
- 第3点计算的值是否和该数字相等。(条件判断)
具体解析
- 位数n判断(以包含4位或者5位的数来思考)
n=0
while i/(10**n)<=10:n+=1
n+=1
- 判断各位上的数字
j=0
sum=0
while j<=n-1:
sum=sum+((i//10**j)%10)**n
#大概思想就是每一位上的数字就是以该位为单位的数对10求模,如12345,百位上的数X就是123.34*100,X是123%10。
j+=1
- 判断各位上的数字n次幂之和是否和原数字i相等
if sum==i:print(i)
最终代码
i=1
while i<=100000:
if i>=100:#判断是不是3位以上的数
n=0
while i/10**n>=10:
n+=1
n+=1
sum=0
j=0
while j<=n-1:
sum=((i//10**j)%10)**n+sum
j+=1
if sum==i:
print(i)
i+=1
10000以内的水仙花数