三位數 abc 若滿足 a³ + b³ + c³ = abc,稱為水仙花數(Narcissistic Number / Armstrong Number)。已知只有四個:153、370、371、407。
提供的程式碼實際上是在計算「相同數字重複相加」(如 5+55+555...),與水仙花數無關。以下提供正確實作。
public class NarcissisticNumber {
public static void main(String[] args) {
System.out.println("所有三位數水仙花數:");
for (int num = 100; num <= 999; num++) {
int a = num / 100; // 百位
int b = (num / 10) % 10; // 十位
int c = num % 10; // 個位
if (a*a*a + b*b*b + c*c*c == num) {
System.out.println(num);
}
}
}
}
public static boolean isArmstrong(int num) {
if (num < 0) return false;
int original = num;
int digits = String.valueOf(num).length();
int sum = 0;
while (num > 0) {
int d = num % 10;
sum += Math.pow(d, digits);
num /= 10;
}
return sum == original;
}
int[] pow = new int[10]; for (int d=0; d<10; d++) pow[d] = (int)Math.pow(d, digits); 避免重複 Math.pow 呼叫。IntStream.rangeClosed(100, 999).parallel().filter(NarcissisticNumber::isArmstrong)...