找出所有三位數 n (100~999),使得 n = a! + b! + c!,其中 a、b、c 分別為 n 的百位、十位、個位數字。要求使用自定義函數實現階乘計算。
a ∈ [1,9]、十位 b ∈ [0,9]、個位 c ∈ [0,9]。#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。本題練習重點:
/100, %10)