水仙花數(Narcissistic Number),又稱阿姆斯壯數,指三位數其各位數字立方和等於該數本身。例如:153 = 1³ + 5³ + 3³。本文提供 Java 實現,支持任意範圍查找。
/**
* 打印 [m, n] 範圍內的水仙花數
* @param m 起始值(含)
* @param n 結束值(含)
*/
public static void printNarcissistic(int m, int n) {
for (int i = m; i <= n; i++) {
// 分解百位、十位、個位
int bai = i / 100;
int shi = (i % 100) / 10;
int ge = i % 10;
// 計算立方和(用整數運算避免浮點誤差)
int sum = bai * bai * bai + shi * shi * shi + ge * ge * ge;
if (i == sum) {
System.out.println(i);
}
}
}
// 測試:標準三位數範圍
public static void main(String[] args) {
printNarcissistic(100, 999);
// 輸出:153, 370, 371, 407
}
廣義定義:N 位數的各位 N 次方和等於自身。
public static boolean isArmstrong(int num) {
String s = String.valueOf(num);
int n = s.length();
int sum = 0;
for (char c : s.toCharArray()) {
int digit = c - '0';
sum += Math.pow(digit, n); // 或預計算 0-9 的 n 次方表
}
return sum == num;
}
// 查找 1000 以內所有阿姆斯壯數
for (int i = 1; i < 10000; i++) {
if (isArmstrong(i)) System.out.println(i);
}
// 輸出:1-9, 153, 370, 371, 407, 1634, 8208, 9474
int[] pow = new int[10]; for(i=0;i<10;i++) pow[i]=i*i*i; 避免重複 Math.powd*d*d 比 Math.pow(d,3) 快得多9³×3=2187,超過 999 無需檢查N×9^N,隨 N 增長最終小於 10^(N-1)水仙花數是經典編程練習,考察位分解、循環控制、數學建模。擴展到 N 位數版本能訓練泛化思維與性能優化意識。