水仙花数是各位数字立方和等于自身的三位数,Java中通过for循环遍历100–999,拆解个十百位、计算立方和并用if判断是否相等。

水仙花数(Narcissistic Number)是指一个三位数,其各位数字的立方和等于该数本身。比如 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153。用 Java 找出所有水仙花数,核心是用流程控制(for 循环 + if 判断)遍历、拆位、计算并比对。
确定范围:只检查 100–999
水仙花数定义特指三位数(也有广义扩展,但经典题默认三位)。所以用 for 循环从 100 开始,到 999 结束:
- // i 代表当前检查的数字
- for (int i = 100; i
拆解各位数字:用取模和整除
对每个 i,需分别取出百位、十位、个位:
- 百位:
i / 100(整数除法,如 153/100 = 1) - 十位:
(i / 10) % 10(先去掉个位,再对 10 取余,153→15→5) - 个位:
i % 10(直接取余,153%10 = 3)
计算立方和并判断是否相等
把三个数字分别立方后相加,与原数 i 比较:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- int a = i / 100;
- int b = (i / 10) % 10;
- int c = i % 10;
- int sum = a*a*a + b*b*b + c*c*c;
- if (sum == i) { System.out.println(i); }
完整可运行代码示例
把上面逻辑组合起来就是标准解法:
public class NarcissisticNumber {
public static void main(String[] args) {
System.out.println("三位水仙花数有:");
for (int i = 100; i <= 999; i++) {
int a = i / 100;
int b = (i / 10) % 10;
int c = i % 10;
if (a*a*a + b*b*b + c*c*c == i) {
System.out.println(i);
}
}
}
}
运行结果输出:153、371、407(共三个)。

















