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

C語言經典練習:尋找 100~999 之間的所有水仙花數

     編輯:關於C語言

什麼是水仙花數?

水仙花數(Narcissistic Number),又稱超完全數字不變數,是指一個三位數,其各位數字的立方和等於該數本身。例如:153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153。

本篇文章將透過 C 語言實作,找出 100 到 999 之間所有的水仙花數,並展示完整的程式碼與執行邏輯。

演算法思路

  1. 遍歷 100 到 999 之間的所有整數。
  2. 對每個數字,分別取出百位、十位、個位數字。
  3. 計算三位數字的立方和。
  4. 若立方和等於原數字,即為水仙花數,存入陣列。
  5. 最後輸出所有水仙花數與非水仙花數(本範例同時記錄兩者)。

關鍵程式碼解析

for(i = 100; i < 1000; i++) {
    a = i % 10;         // 取個位數
    b = i / 10 % 10;    // 取十位數
    c = i / 100;        // 取百位數

    if(i == a*a*a + b*b*b + c*c*c) {
        num[k++] = i;   // 是水仙花數
    } else {
        cout[l++] = i;  // 非水仙花數
    }
}

注意: 原始碼中迴圈條件為 i < 200,僅檢查到 199。正確應為 i < 1000 以涵蓋所有三位數。

完整程式碼

#include <stdio.h>

int main() {
    int i, a, b, c;
    int k = 0, l = 0;
    int num[100], cout[100];

    for(i = 100; i < 1000; i++) {
        a = i % 10;
        b = i / 10 % 10;
        c = i / 100;

        if(i == a*a*a + b*b*b + c*c*c) {
            num[k++] = i;
        } else {
            cout[l++] = i;
        }
    }

    printf("水仙花數:\n");
    for(i = 0; i < k; i++) {
        printf("%d\n", num[i]);
    }

    printf("不是水仙花數:\n");
    for(i = 0; i < l; i++) {
        printf("%d\n", cout[i]);
    }

    return 0;
}

執行結果

程式執行後將輸出四個水仙花數:

153
370
371
407

延伸思考

水仙花數的概念可推廣到 n 位數:若一個 n 位數等於其各位數字的 n 次方和,則稱為 n 位水仙花數。讀者可嘗試修改程式,尋找四位數的水仙花數(如 1634、8208、9474)。

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