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

C語言實作階乘累加:1! + 2! + ... + n! 完整程式碼與解析

     編輯:C 語言問答

題目需求

使用 `for` 迴圈計算從 1! 累加到 n! 的總和,即 S = 1! + 2! + 3! + ... + n!。

核心邏輯與程式碼實作

採用模組化設計:撰寫一個計算階乘的函式 `factorial()`,主程式迴圈累加呼叫該函式。

#include <stdio.h>

// 計算階乘的函式
long long factorial(int n) {
    if (n <= 1) return 1;
    long long result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

int main() {
    int n;
    printf("請輸入正整數 n: ");
    scanf("%d", &n);
    
    long long sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += factorial(i);
    }
    
    printf("1! + 2! + ... + %d! = %lld\n", n, sum);
    return 0;
}

關鍵點解析

  • 資料型別選擇:階乘增長極快,`int` 易溢位,採用 `long long` 延伸範圍(可支援至 20! 左右)。
  • 函式設計:`factorial()` 獨立封裝階乘邏輯,提高可讀性與複用性。
  • 迴圈累加:主程式 `for` 迴圈從 1 到 n,每次呼叫 `factorial(i)` 並累加至 `sum`。
  • 邊界條件:`factorial(0)` 定義為 1,符合數學定義;輸入驗證可自行加入。

執行範例

請輸入正整數 n: 5
1! + 2! + ... + 5! = 153

驗算:1 + 2 + 6 + 24 + 120 = 153 ✓

進階優化方向

若 n 較大,可避免重複計算:在主迴圈中直接維護當前階乘值,每輪乘以 i 即可,無需額外函式呼叫:

long long current_fact = 1;
long long sum = 0;
for (int i = 1; i <= n; i++) {
    current_fact *= i;  // i! = (i-1)! * i
    sum += current_fact;
}

此法減少函式呼叫開銷,效能更佳。

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