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

C語言水仙花數 (阿姆斯壯數) 三種求解法:暴力分解、pow 函數、算術分解

     編輯:關於C

定義

三位數 abc,滿足 a³ + b³ + c³ = abc。範圍 100~999。

方法一:直接分解 (最快、無庫依賴)

for (int n = 100; n < 1000; n++) {
    int a = n / 100;
    int b = n / 10 % 10;
    int c = n % 10;
    if (a*a*a + b*b*b + c*c*c == n)
        printf("%d ", n);
}
// 153 370 371 407

方法二:pow 函數 (通用 n 位數,但浮點精度風險)

#include 
for (int n = 100; n < 1000; n++) {
    int sum = 0, m = n;
    while (m) {
        sum += pow(m % 10, 3); // pow 回傳 double,隱式轉 int 可能 152.9999→152
        m /= 10;
    }
    if (sum == n) printf("%d ", n);
}
// 建議: sum += (int)round(pow(...)) 或自寫 ipow

方法三:另類分解 (教學展示)

int a = n/100;
int b = (n - a*100)/10;
int c = n - a*100 - b*10;

結果

只有 4 個:153, 370, 371, 407。

擴展:n 位數水仙花數

int ipow(int base, int exp) {
    int r = 1;
    while (exp--) r *= base;
    return r;
}

void find_armstrong(int digits) {
    int start = ipow(10, digits-1);
    int end = ipow(10, digits);
    for (int n = start; n < end; n++) {
        int sum = 0, m = n;
        while (m) { sum += ipow(m%10, digits); m/=10; }
        if (sum == n) printf("%d ", n);
    }
}
// 4位: 1634, 8208, 9474
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved