def is_narcissistic(number, n):
return sum(int(digit) ** n for digit in str(number)) == number
def find_narcissistic_numbers(n):
start = 10 ** (n - 1)
end = 10 ** n
narcissistic_numbers = []
for number in range(start, end):
if is_narcissistic(number, n):
narcissistic_numbers.append(number)
return narcissistic_numbers
def get_nth_narcissistic_number(n, m):
if n < 3 or n> 7:
return -1
if m < 0:
return -1
narcissistic_numbers = find_narcissistic_numbers(n)
count = len(narcissistic_numbers)
if count == 0:
return -1
if m < count:
return narcissistic_numbers[m]
else:
return narcissistic_numbers[-1] * m
# 自定义输入
n = int(input("请输入位数n(3到7之间):"))
m = int(input("请输入序号m:"))
result = get_nth_narcissistic_number(n, m)
print("结果为:", result)
解决步骤
- 输入验证:
检查输入的n是否在3到7之间。
检查m是否为正整数。
- 生成水仙花数:
根据n的值,生成所有n位的水仙花数。
水仙花数的定义是:一个n位的正整数,其各位数字的n次方和等于该数本身。
- 返回结果:
如果m小于水仙花数的个数,返回第m个水仙花数。
如果m大于水仙花数的个数,返回最后一个水仙花数和m的乘积。
如果输入不合法,返回-1。