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

水仙花數(阿姆斯壯數)C語言求解:三種實現方式與性能對比

     編輯:C 語言問答

問題定義

三位數水仙花數:abc = a³ + b³ + c³,其中 a∈[1,9], b,c∈[0,9]。已知解:153、370、371、407。

方法一:位分解法(教學標準解)


#include 

int main() {
    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);
    }
    printf("\n");
    return 0;
}

方法二:預計算立方表(優化乘法)


int cube[10];
for (int i = 0; i < 10; i++) cube[i] = i*i*i;

for (int n = 100; n < 1000; n++) {
    int a = n/100, b = n/10%10, c = n%10;
    if (cube[a] + cube[b] + cube[c] == n)
        printf("%d ", n);
}

方法三:三重循環生成法(無除法取模)


for (int a = 1; a <= 9; a++) {
    for (int b = 0; b <= 9; b++) {
        for (int c = 0; c <= 9; c++) {
            int sum = a*a*a + b*b*b + c*c*c;
            if (sum == a*100 + b*10 + c)
                printf("%d ", sum);
        }
    }
}

性能與風格對比

方法迭代次數運算特點推薦場景
位分解900含除法取模,直觀易懂教學、面試
立方表900查表替代乘法,微優化嵌入式無乘法器
三重循環900無除法,直接構造數字算法思維訓練

泛化:N 位阿姆斯壯數


bool is_armstrong(int n) {
    int original = n, digits = 0, sum = 0;
    int temp = n;
    while (temp) { digits++; temp /= 10; }
    temp = n;
    while (temp) { 
        int d = temp % 10; 
        int p = 1; for (int i=0;i

水仙花數是經典的數位 DP / 枚舉入門題,關鍵在於位分解技巧與邊界條件控制。

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