在java中,利用for循环判断水仙花数需要遍历指定范围内的每个整数,通过取模和除法提取各位数字并计算立方和,若和等于原数则判定为水仙花数。具体做法是外层for循环控制范围,内层使用while或for循环分解位数,累加结果后与原值比对。

如何从单个整数中提取各位数字
提取各位数字的核心逻辑是利用十进制的特性,通过反复对10取余获取当前最低位,然后除以10去掉该位,直到数值变为0。对于三位数而言,个位、十位和百位可以通过固定次数的取余操作分别获得,无需动态循环即可直接计算。

int number = 153;
int temp = number;
int sum = 0;
// 方法一:通用循环提取(适用于任意位数)
while (temp > 0) {
int digit = temp % 10;
sum += digit * digit * digit;
temp /= 10;
}
// 方法二:针对三位数硬编码提取
int hundreds = number / 100;
int tens = (number / 10) % 10;
int units = number % 10;
sum = (hundreds * hundreds * hundreds) +
(tens * tens * tens) +
(units * units * units);
上述代码展示了两种提取方式。第一种使用while循环,适合不确定位数的场景;第二种直接计算百位、十位和个位,效率更高且逻辑直观。变量digit存储当前位的值,sum用于累加立方和。注意temp是副本,避免修改原始输入number。
如何在范围内筛选并输出所有水仙花数
要在一个范围内找出所有水仙花数,只需将单数字的判断逻辑包裹在遍历范围的for循环中,并对每个数执行相同的提取与求和操作。当发现满足条件的数时,将其打印或存入列表。通常水仙花数搜索范围为100到999,因为这是唯一的三位水仙花数区间。

public class NarcissisticNumber {
public static void main(String[] args) {
int start = 100;
int end = 999;
System.out.println("查找 " + start + " 到 " + end + " 之间的水仙花数:");
for (int i = start; i 0) {
int digit = num % 10;
sum += digit * digit * digit;
num /= 10;
}
return sum == original;
}
}
该程序定义了isNarcissistic方法封装判断逻辑,主循环从100遍历至999。预期输出结果为:153, 370, 371, 407。这些数字的各位数字立方和均等于其自身。若需扩展到其他位数,可调整start和end的值,并修改isNarcissistic中的幂次计算以匹配位数。
当输入为非三位数时程序行为如何
如果修改范围包含非三位数,例如100到1000,程序依然能正确工作,但需注意水仙花数的定义通常针对特定位数。对于一位数(如1-9),它们也满足“各位数字的n次方之和等于自身”的定义(n=1),因此会被识别。但对于四位数,若仍使用立方和判断,则不会找到任何结果,因为四位水仙花数需要四次方和。本示例代码固定使用立方运算,因此仅适用于三位数场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











