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

自然數的和之和:C 語言雙重累加與函數封裝實作

     編輯:關於C

數學定義

計算 S = 1 + (1+2) + (1+2+3) + ... + (1+2+...+N)。第 i 項為三角數 T(i) = i(i+1)/2,總和 S = Σ T(i) = N(N+1)(N+2)/6。

程式結構

採用函數 SUM(int num) 計算單項三角數,主程式迴圈累加。輸入第一行為測資筆數 T,後續每行一個 N。

完整程式碼

#include <stdio.h>

int SUM(int num);

int main() {
    int i, n, num, sum;

    scanf("%d", &n);
    while (n--) {
        scanf("%d", &num);
        sum = 0;
        for (i = 1; i <= num; i++) sum += SUM(i);
        printf("%d", sum);
        if (n > 0) printf("\n");
    }
    return 0;
}

int SUM(int num) {
    int i, sum = 0;
    for (i = 1; i <= num; i++) sum += i;
    return sum;
}

優化建議

直接套用公式 num*(num+1)*(num+2)/6 可將時間複雜度從 O(N²) 降至 O(1)。注意 N ≤ 200,結果最大 1353400,int 足夠。

測試樣本

Sample Input:
2
1
200

Sample Output:
1
1353400

執行畫面

執行結果

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