Narcissistic number
水仙花数(Narcissistic number)是指一个 n 位数,其每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个水仙花数,因为 1³ + 5³ + 3³ = 153。
下面是一个用 Python 编写的判断水仙花数的函数:
def is_narcissistic_number(num):
# 将数字转换为字符串,方便逐位处理
num_str = str(num)
# 获取数字的位数
n = len(num_str)
# 计算每个位上的数字的 n 次幂之和
sum_of_powers = sum(int(digit) ** n for digit in num_str)
# 判断是否为水仙花数
return sum_of_powers == num
# 测试函数
number = 153
if is_narcissistic_number(number):
print(f"{number} 是水仙花数")
else:
print(f"{number} 不是水仙花数")
代码说明:
- str(num):将数字转换为字符串,方便逐位处理。
- len(num_str):获取数字的位数。
- sum(int(digit) ** n for digit in num_str):计算每个位上的数字的 n 次幂之和。
- sum_of_powers == num:判断计算的和是否等于原数字。
但通常讨论的水仙花数特指 3 位及以上的特殊数(如 153、9474 等),因为它们需要满足更复杂的幂次和条件。
调用函数求正整数N(三位数以上)以内的水仙花数:
def is_narcissistic_number(num):
#先判断是否三位以上
if num >= 100:
# 将数字转换为字符串,方便逐位处理
num_str = str(num)
# 获取数字的位数
n = len(num_str)
# 计算每个位上的数字的 n 次幂之和
sum_of_powers = sum(int(digit) ** n for digit in num_str)
# 判断是否为水仙花数
return sum_of_powers == num
#求1000以内的水仙花数
for num in range(1, 1000+1):
if is_narcissistic_number(num):
print(num)