Python 实现三位数水仙花数判断与求解方法
1. 问题背景与定义
水仙花数(Narcissistic number),也被称为阿姆斯特朗数(Armstrong number)。在数学中,它是指一个 n 位数,其各位数字的 n 次幂之和等于该数本身。对于三位数的情况,即满足以下等式的整数:
$$ d_1^3 + d_2^3 + d_3^3 = N $$
其中 $d_1, d_2, d_3$ 分别是百位、十位和个位上的数字,$N$ 是原数。
例如:153 是一个水仙花数,因为 $1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153$。
本文将以 Python 语言为例,详细讲解如何判断一个三位数是否为水仙花数,以及如何遍历并找出所有三位数范围内的水仙花数。我们将探讨多种实现方案,包括算术运算法和字符串处理法,并对代码进行优化和扩展。
2. 核心逻辑分析
要解决这个问题,核心步骤在于提取数字的每一位,计算其立方和,然后与原数进行比较。在 Python 中,主要有两种提取数字的方法:
- 算术运算法:利用整除
//和取模%运算符分离各位数字。 - 字符串转换法:将数字转换为字符串,通过索引访问每一位字符再转回整数。
2.1 算术运算法详解
假设输入的数字为 num:
- 个位:
num % 10 - 十位:
(num // 10) % 10 - 百位:
num // 100
注意:在 Python 3 中,除法 / 返回浮点数,而整除 // 返回整数。为了保持类型一致性和避免精度问题,必须使用 //。
2.2 字符串转换法详解
将整数转为字符串后,可以直接通过下标访问字符:
str_num[0]对应百位str_num[1]对应十位str_num[2]对应个位
这种方法代码更简洁,但涉及类型转换,性能略低于纯算术运算,不过对于三位数这种小规模数据,差异可忽略不计。
3. 代码实现方案
3.1 方案一:用户输入判断
此方案用于判断用户输入的单个三位数是否为水仙花数。
# 获取用户输入并转换为整数
try:
num = int(input("请输入一个三位数:"))
# 校验范围
if not (100 <= num <= 999):
print("输入错误:请输入 100 到 999 之间的整数")
else:
# 提取各位数字
gw = num % 10
sw = (num // ) %
bw = num //
total = gw** + sw** + bw**
total == num:
()
:
()
ValueError:
()


