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

水仙花數(阿姆斯壯數)Java 完整實作與擴展

     編輯:Java 相關知識

什麼是水仙花數?

三位數 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)...

數學冷知識

  • 十進制下 n 位數的阿姆斯壯數總數有限,最大為 39 位數(115,132,219,018,763,992,565,095,597,973,971,522,401)。
  • 三位數僅 4 個;四位數有 3 個(1634, 8208, 9474)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved