水仙花数是各位数字的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 </font>
其中 isNarcissistic(int num) 是封装好的判定方法,内部完成位数统计与幂和计算。
处理多位数时注意幂运算的准确性
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 </font>
这样避免类型转换和精度问题,尤其在大指数或大量计算时更可靠。
扩展:支持任意位数(不限三位)的通用判定
水仙花数不只限于三位。四位的如 1634(1⁴+6⁴+3⁴+4⁴=1634),五位、六位也有。通用判定需动态获取位数:
- 把数字转成字符串,length() 就是位数 n
- 或用 while 循环不断除 10 计数(注意处理 0 的边界)
- 再逐位取余、幂运算、累加,最后比对
这样写出来的 isNarcissistic 方法就能用于 100~999999 等更广范围,无需为不同位数重写逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











