Python 用while()判断并输出1000以内(或10000以内)的水仙花数

什么是水仙花数:水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)

思路解析

  1. 判断这个数的位数是否是3位以上。(如果是1000以内的数字,问题比较简单,可以直接判断是否≥100;如果要判断的数还包括4位的,那还需要判断数字的位数,可以考虑用循环来做)
  2. 判断这个数各个位上的数字。(我认为这个是这个题的核心点)
  3. 各位上的数字的n次幂的和的计算。(循环)
  4. 第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

Python 用while()判断并输出1000以内(或10000以内)的水仙花数10000以内的水仙花数