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

Java 類與物件實戰:Print 類別計算水仙花數 (Narcissistic Number)

     編輯:Java 綜合教學

什麼是水仙花數?

三位數中,各位數字立方和等於該數本身:

abc = a³ + b³ + c³

例如:371 = 3³ + 7³ + 1³ = 27 + 343 + 1 = 371

Print 類別實作

public class Print {
    public void output() {
        System.out.println("100~999 之間的水仙花數:");
        for (int i = 100; i <= 999; i++) {
            int gw = i % 10;         // 個位
            int sw = i / 10 % 10;    // 十位
            int bw = i / 100;        // 百位
            
            if (i == gw*gw*gw + sw*sw*sw + bw*bw*bw) {
                System.out.println(i);
            }
        }
    }
}

測試主類

public class TestPrint {
    public static void main(String[] args) {
        Print p = new Print();
        p.output();
    }
}

執行結果

100~999 之間的水仙花數:
153
370
371
407

程式執行結果截圖

數學驗證

數字百位³十位³個位³總和
1531³=15³=1253³=27153 ✓
3703³=277³=3430³=0370 ✓
3713³=277³=3431³=1371 ✓
4074³=640³=07³=343407 ✓

演算法擴充:通用 N 位數自戀數

public static void printNarcissistic(int digits) {
    int start = (int) Math.pow(10, digits - 1);
    int end = (int) Math.pow(10, digits) - 1;
    
    for (int i = start; i <= end; i++) {
        int sum = 0;
        int temp = i;
        while (temp > 0) {
            int digit = temp % 10;
            sum += Math.pow(digit, digits);
            temp /= 10;
        }
        if (sum == i) System.out.println(i);
    }
}

// 呼叫:printNarcissistic(3) → 153, 370, 371, 407
// printNarcissistic(4) → 1634, 8208, 9474

效能優化:預計算冪次表

public static void printNarcissisticFast(int digits) {
    // 預計算 0^d ~ 9^d
    int[] pow = new int[10];
    for (int d = 0; d <= 9; d++) {
        pow[d] = (int) Math.pow(d, digits);
    }
    
    int start = (int) Math.pow(10, digits - 1);
    int end = (int) Math.pow(10, digits) - 1;
    
    for (int i = start; i <= end; i++) {
        int sum = 0;
        int temp = i;
        while (temp > 0) {
            sum += pow[temp % 10];
            temp /= 10;
        }
        if (sum == i) System.out.println(i);
    }
}

相關數學知識

  • 水仙花數屬於 自戀數 (Narcissistic Number) 或 阿姆斯壯數 (Armstrong Number)
  • n 位數自戀數最大值:n × 9ⁿ,當 n ≥ 60 時 n × 9ⁿ < 10ⁿ⁻¹,故自戀數有限個 (共 88 個)
  • 最大自戀數:39 位數 115132219018763992565095597973971522401
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved