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

C語言水仙花數(阿姆斯壯數)查找的三種實現方式

     編輯:C 語言問答

C語言實現水仙花數查找:三重循環、數學分解、函數封裝三種寫法

水仙花數指三位數等於其各位數字立方和。本文展示三種不同思路的 C 語言實現,幫助理解循環嵌套、數位拆分與模塊化設計。

方法一:三重循環枚舉百十個位(最直觀)


#include <stdio.h>

int main() {
    int a, b, c, n, sum;
    printf("水仙花數:");
    for (a = 1; a <= 9; a++) {      // 百位 1-9
        for (b = 0; b <= 9; b++) {  // 十位 0-9
            for (c = 0; c <= 9; c++) { // 個位 0-9
                n = 100*a + 10*b + c;
                sum = a*a*a + b*b*b + c*c*c;
                if (n == sum) printf("%d ", n);
            }
        }
    }
    printf("\n");
    return 0;
}

方法二:遍歷 100-999 分解數位(更通用)


#include <stdio.h>

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

方法三:封裝判斷函數(工程化風格)


#include <stdio.h>
#include <math.h>

// 判斷任意正整數是否為水仙花數(n 位數各位 n 次方和等於自身)
int is_narcissistic(int num) {
    if (num <= 0) return 0;
    int original = num, digits = 0, sum = 0;
    while (original) { digits++; original /= 10; }
    original = num;
    while (original) {
        int d = original % 10;
        sum += pow(d, digits);
        original /= 10;
    }
    return sum == num;
}

int main() {
    printf("10000 以內水仙花數:");
    for (int i = 1; i < 10000; i++)
        if (is_narcissistic(i)) printf("%d ", i);
    printf("\n");
    return 0;
}

編譯與運行


gcc narcissistic.c -o narcissistic -lm  // 方法三需鏈接數學庫
./narcissistic

輸出結果


水仙花數:153 370 371 407 
10000 以內水仙花數:1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 

核心知識點

  • 整數分解數位:/10 取高位,%10 取低位。
  • 立方運算:x*x*x 比 pow(x,3) 更高效且無需鏈接庫。
  • 函數封裝:將判斷邏輯提取為 is_narcissistic,主函數只負責遍歷與輸出,符合單一職責原則。
  • 擴展性:方法三可直接用於任意位數水仙花數查找。

總結

三種方法各有優勢:方法一適合初學者理解嵌套循環;方法二代碼緊湊、易擴展到固定位數;方法三體現軟件工程思想,便於復用與測試。建議初學者先掌握前兩種,進階後採用函數封裝風格。

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