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

C語言經典習題:尋找所有符合 n = a! + b! + c! 的三位數(含自定義階乘函數)

     編輯:關於C語言

題目說明

找出所有三位數 n (100~999),使得 n = a! + b! + c!,其中 a、b、c 分別為 n 的百位、十位、個位數字。要求使用自定義函數實現階乘計算。

解題思路

  1. 三位數範圍固定,百位 a ∈ [1,9]、十位 b ∈ [0,9]、個位 c ∈ [0,9]。
  2. 預先計算 0!~9! 存入查找表,避免重複運算(9! = 362,880,三位數上限 999,實際上只有 0!~6! 可能用到)。
  3. 三層巢狀迴圈窮舉所有組合,計算階乘和,若等於該三位數則輸出。
  4. 本題重點在於函數封裝與窮舉搜尋的基礎練習。

完整 C 代碼

#include <stdio.h>

int factorial(int m);  // 函數宣告

int main() {
    int a, b, c, n;

    for (a = 1; a < 10; a++) {      // 百位不可為 0
        for (b = 0; b < 10; b++) {
            for (c = 0; c < 10; c++) {
                n = factorial(a) + factorial(b) + factorial(c);
                if (n >= 100 && n < 1000) {
                    // 進一步驗證 n 的各位數字是否正是 a,b,c
                    if (n / 100 == a && (n / 10) % 10 == b && n % 10 == c) {
                        printf("符合條件的有: %d\n", n);
                    }
                }
            }
        }
    }
    return 0;
}

// 自定義階乘函數
int factorial(int m) {
    int sum = 1;
    if (m > 1) {
        for (int i = 1; i <= m; i++) {
            sum *= i;
        }
    }
    return sum;
}

執行結果與知識點

唯一解為 145(1! + 4! + 5! = 1 + 24 + 120 = 145)。

補充:這類數字稱為因子數,四位數還有 40585。本題練習重點:

  • 函數原型宣告與定義分離
  • 迴圈邊界條件設定(百位從 1 開始)
  • 整數拆位驗證技巧(/100, %10)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved