计算水仙花数(阿姆斯特朗数)的实现
水仙花数(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))
浙公网安备 33010602011771号