用Python输出自幂数

自幂数是什么

  自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。例如:当n为3时,153即是n为3时的一个自幂数。
  自幂数包括独身数、水仙花数、四叶玫瑰数、五角星数、六合数、北斗七星数、八仙数、九九重阳数、十全十美数等。

从水仙花数说起

  今天的计导课上,老师布置了一项作业:用Python输出所有的水仙花数。水仙花数即为当n=3时的自幂数。用Python 3.6编写代码如下:

for num in range(100,1000):
    i = num % 10                     #个位
    k = int(num / 100)               #百位
    j = int((num - k * 100) / 10)    #十位
    sum = i ** 3 + j ** 3 + k ** 3
    if(num == sum):
        print('%d' %num)

  它的思路是将三位数的个位、十位、百位分解,然后分别用个位、十位、百位的三次方作和,判断所求的和与原来的三位数是否相等,如果相等即为水仙花数。
  另一种解法如下所示:

for i in range(100,1000):
    num = str(i)
    sum = 0
    for j in num:
        sum = sum + int(j)**3
    if(sum == i):
        print(i)

从水仙花数到其他自幂数

  通过上面所说的思路,我们可以用Python写出四叶玫瑰数、五角星数等其他自幂数。
  下面是用Python 3.6编写的四叶玫瑰数程序:

for num in range(1000,10000):
    i = num % 10                             #个位
    l = num // 1000                          #千位
    k = (num % 1000) // 100                  #百位
    j = (num % 100) // 10                    #十位
    sum = pow(i,4) + pow(j,4) + pow(k,4) + pow (l,4)
    if(num == sum):
        print(num)

  接下来是用Python 3.6编写的五角星数程序:

for num in range(10000,100000):
    a = num // 10000            #万位
    b = (num % 10000) // 1000   #千位
    c = (num % 1000) // 100     #百位
    d = (num % 100) // 10       #十位
    e = num % 10                #个位
    sum = pow(a,5) + pow(b,5) + pow(c,5) + pow(d,5) + pow(e,5)
    if(num == sum):
        print(num)

  如果你愿意的话,还可以试着用这种思路编写六合数、北斗七星数……十全十美数。

可以输出你想要的自幂数的终极版本

  当我把我写好的程序发到课堂的交流群的时候,一个同学问我:“能用一个程序把所有的自幂数输出出来吗?”答案是肯定的。
  考虑到自幂数实在太多,我的想法是,首先让用户键入想要的自幂数的位数,然后使用if条件语句和for循环语句达到想要的结果。
  用Python编写的最终版本如下:

import math
while True:
    n=int(input("请输入自幂数位数:\n"))
    if(n == 1):
        print("独身数:")
        print("0\t")
    elif(n == 2):
        print("两位自幂数:")
        print("没有自幂数!")
    elif(n == 3):
        print("水仙花数:")
    elif(n == 4):
        print("四叶玫瑰数:")
    elif(n == 5):
        print("五角星数:")
    elif(n == 6):
        print("六合数:")
    elif(n == 7):
        print("北斗七星数:")
    elif(n == 8):
        print("八仙数:")
    elif(n == 9):
        print("九九重阳数:")
    elif(n == 10):
        print("十全十美数:")
    else:
        print("其它自幂数:")
    for i in range(int(math.pow(10,n-1)),int(math.pow(10,n))):
        num = 0
        for j in str(i):
            num += int(math.pow(int(j),n))
        if(i == num):
            print(i)

写在最后

  以上就是用Python输出自幂数的全部内容了。写这个程序的思路不唯一,我只是用我认为最简单易懂的方法写出了这个程序。我也相信肯定有更为简便的方法来实现它。如果你有不同的思路,欢迎联系我,我非常期待你们的来信!
  我的邮箱:[email protected]

发布了21 篇原创文章 · 获赞 6 · 访问量 1671

猜你喜欢

转载自blog.csdn.net/qq_45554010/article/details/102846967