首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 計算水仙花數(阿姆斯壯數):三位數立方和等於自身

     編輯:Java 相關知識

水仙花數(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 位數的各位 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

性能優化技巧

  1. 預計算次方表:int[] pow = new int[10]; for(i=0;i<10;i++) pow[i]=i*i*i; 避免重複 Math.pow
  2. 整數運算:三位數用 d*d*d 比 Math.pow(d,3) 快得多
  3. 早期剪枝:最大三位數立方和 9³×3=2187,超過 999 無需檢查

數學背景

  • 三位數水仙花數僅有 4 個:153, 370, 371, 407
  • 四位數:1634, 8208, 9474
  • 不存在 2 位水仙花數(最大 9²+9²=162 < 10)
  • 證明:N 位數最大立方和 N×9^N,隨 N 增長最終小於 10^(N-1)

水仙花數是經典編程練習,考察位分解、循環控制、數學建模。擴展到 N 位數版本能訓練泛化思維與性能優化意識。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved