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

C語言尋找水仙花數:三位數自冪數完整實作與數學原理

     編輯:關於C

定義

三位數水仙花數:$abc = a^3 + b^3 + c^3$,其中 $a$ 為百位,$b$ 為十位,$c$ 為個位。

數學範圍

  • 最小三位數:100 → $1^3+0^3+0^3=1$
  • 最大三位數:999 → $9^3+9^3+9^3=2187$
  • 實際水仙花數僅存在於 100~999 之間。

完整程式碼

#include 
#include 

int main() {
    printf("水仙花數 (100-999): ");
    for (int n = 100; n <= 999; n++) {
        int a = n / 100;         // 百位
        int b = (n / 10) % 10;   // 十位
        int c = n % 10;          // 個位
        int sum = a*a*a + b*b*b + c*c*c; // 避免 pow 浮點誤差
        if (sum == n) printf("%d ", n);
    }
    printf("\n");
    return 0;
}

執行結果

水仙花數 (100-999): 153 370 371 407

關鍵優化:整數運算替代 pow()

  • `pow(5,3)` 可能回傳 `124.999999` 導致比較失敗。
  • 直接用 `a*a*a` 整數乘法精確、高效。

擴展:N 位數自冪數

void find_armstrong(int digits) {
    int start = 1;
    for (int i = 1; i < digits; i++) start *= 10;
    int end = start * 10 - 1;
    for (int n = start; n <= end; n++) {
        int tmp = n, sum = 0;
        while (tmp) {
            int d = tmp % 10;
            int p = 1;
            for (int i = 0; i < digits; i++) p *= d;
            sum += p;
            tmp /= 10;
        }
        if (sum == n) printf("%d ", n);
    }
}

總結

水仙花數是經典迴圈與位數分解練習。關鍵技巧:`/100`、`/10%10`、`%10` 取三位數字,**整數乘法替代 `pow` 避免浮點誤差**。四個水仙花數:153, 370, 371, 407。

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