因子數 是指一個數等於其各位數字階乘之和。已知只有四個十進制因子數:1, 2, 145, 40585。本文實現三位數範圍內(100-999)的枚舉查找,核心為階乘函數與位數分解。
J(n) 計算 n!(n ≤ 9,結果可預計算優化)。s。ge = s%10; shi = s/10%10; bai = s/100;s == J(ge) + J(shi) + J(bai),滿足則輸出。#include// 階乘函數(可優化為查表) int J(int n) { int t = 1; for (int i = 1; i <= n; i++) t *= i; return t; } int main() { for (int s = 100; s < 1000; s++) { int ge = s % 10; int shi = s / 10 % 10; int bai = s / 100; if (s == J(ge) + J(shi) + J(bai)) { printf("%d = %d! + %d! + %d!\n", s, bai, shi, ge); } } return 0; }
145 = 1! + 4! + 5!
fact[10],O(1) 獲取,消除重複計算。因子數在不同進制下定義不同,十進制僅有 4 個(含 1, 2)。此題常作為「枚舉+分解+函數封裝」綜合訓練題。