关尔1994

导航

计算水仙花数(阿姆斯特朗数)的实现

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number);

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

超过三位的被称为四叶玫瑰、五角星、六合数等。

最近的面试遇到一个求 3-7 位的水仙花数算法题,具体要求为:

输入 m,n ,其中 m 为第几个水仙花数,n 为水仙花数的位数,既通过程序实现求一个 n 位第 m 个水仙花数。如:

#输入
1
3
#输出
153

实现思路:

输入 m 为1,由于计算机的特性,应获取实际获得的第 [0] 个水仙花数

输入 n 需要在 3-7 之间,因此增加一个判断

如输入 n 为5,则应该获取 10000-99999 中存在的水仙花数,程序实现则为 range(pow(10,4),pow(10,5)) ,其中 pow(x,y) 函数为求 x 的 y 次幂,也可以用 x**y 代替

水仙花数为每位数的 n 次方之和,如 153 = 1*1*1+5*5*5+3*3*3 ,因此在遍历范围内的值时,需要获取该值的每一位并进行运算求和

程序实现:

m = int(input())
while True:
    n = int(input())
    if (n<3 or n>7):
        print("请输入3-7的整数:")
        continue
    else:
        break

def flower(m,n):
    l = [] #用于存放n位数的水仙花数
    storage = [] #用于存放0-9的n次方
    for i in range(10):
        storage.append(pow(i,n))
    for num in range(pow(10,n-1),pow(10,n)):
        num_st = str(num)
        numa = 0
        for j in num_st :
            numa = numa+pow(int(j),n)
        if (num ==numa):
            l.append(num)
    return(l[m-1])

print(flower(m,n))

 

posted on 2021-08-10 16:35  关尔1994  阅读(385)  评论(0)    收藏  举报