本題通過函數分層實現:底層 J(n) 計算單個階乘,上層 main 累加求和,並加入輸入合法性驗證(0 < n ≤ 25),展示 C 語言模塊化編程基本範式。
#include#define MAX_N 25 // 階乘函數 int J(int n) { int t = 1; for (int i = 1; i <= n; i++) t *= i; return t; } int main() { int n, sum = 0, flag = 1; // 輸入驗證循環 while (flag) { printf("輸入要計算階乘和的最大數 (0 < n <= %d): ", MAX_N); scanf("%d", &n); if (n > 0 && n <= MAX_N) flag = 0; else printf("輸入無效,請重試!\n"); } // 累加求和 for (int i = 1; i <= n; i++) sum += J(i); printf("1! + 2! + ... + %d! = %d\n", n, sum); return 0; }
J 只負責階乘,main 負責交互與累加,符合高內聚低耦合。flag 開關變量控制循環,直到合法輸入,避免非法數據導致邏輯錯誤。#define MAX_N 25 統一上限,便於維護修改。long long 或大數庫,此處為教學簡化。int main() {
// ... 輸入驗證同上 ...
long long fact = 1, sum = 0;
for (int i = 1; i <= n; i++) {
fact *= i; // 遞推計算 i!
sum += fact; // 直接累加
}
printf("和 = %lld\n", sum);
return 0;
}
遞推版將時間複雜度從 O(n²) 降為 O(n),且天然適合大數擴展。