水仙花数是各位数字的n次方和等于自身的n位正整数;判定需先求位数n,再逐位取余计算n次幂累加并与原数比较;Java中宜用整数循环幂运算避免浮点误差,且方法应支持任意位数通用判定。

水仙花数(Narcissistic Number),也叫自幂数,是指一个 n 位正整数,其各位数字的 n 次方之和等于它本身。例如:153 是三位数,而 1³ + 5³ + 3³ = 1 + 125 + 27 = 153,所以它是水仙花数。
明确水仙花数的判定逻辑
要判断一个数 num 是否为水仙花数,关键步骤有三步:
- 计算 num 的位数 n(可用字符串长度或循环取余计数)
- 遍历 num 的每一位数字(如用 num % 10 取个位,再 num /= 10 缩小)
- 对每位数字求 n 次幂并累加,最后比较总和是否等于原数
用 for 循环遍历指定范围找水仙花数
常见需求是找出某区间(如 100 到 999)内所有水仙花数。Java 中可结合 for 控制变量 + 判定方法实现:
<font color="#888">public static void main(String[] args) {
System.out.println("三位水仙花数有:");
for (int i = 100; i <= 999; i++) {
if (isNarcissistic(i)) {
System.out.print(i + " ");
}
}
}</font>
其中 isNarcissistic(int num) 是封装好的判定方法,内部完成位数统计与幂和计算。
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
处理多位数时注意幂运算的准确性
Java 中 Math.pow() 返回 double,直接强转 int 可能因浮点误差出错(如 Math.pow(5,3) 理论是 125.0,但极少数情况可能为 124.999...)。稳妥做法是用整数循环乘法实现幂运算:
<font color="#888">private static int pow(int base, int exp) {
int result = 1;
for (int i = 0; i < exp; i++) {
result *= base;
}
return result;
}</font>
这样避免类型转换和精度问题,尤其在大指数或大量计算时更可靠。
扩展:支持任意位数(不限三位)的通用判定
水仙花数不只限于三位。四位的如 1634(1⁴+6⁴+3⁴+4⁴=1634),五位、六位也有。通用判定需动态获取位数:
- 把数字转成字符串,length() 就是位数 n
- 或用 while 循环不断除 10 计数(注意处理 0 的边界)
- 再逐位取余、幂运算、累加,最后比对
这样写出来的 isNarcissistic 方法就能用于 100~999999 等更广范围,无需为不同位数重写逻辑。

















