«

Narcissistic number

admin 发布于 阅读:282 Python


水仙花数(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} 不是水仙花数")

代码说明:

  1. str(num):将数字转换为字符串,方便逐位处理。
  2. len(num_str):获取数字的位数。
  3. sum(int(digit) ** n for digit in num_str):计算每个位上的数字的 n 次幂之和。
  4. 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)

python