Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tổng chuỗi 1/1 + (1+2)/(1·2) + (1+2+3)/(1·2·3) + ... trong C++

Cho n. Tính S = 1/1 + (1+2)/(1·2) + (1+2+3)/(1·2·3) + ... + (1+...+n)/(1·2·...·n).

Ví dụ

n = 3: S = 1/1 + 3/2 + 6/6 = 1 + 1.5 + 1 = 3.5

Thuật toán

Duyệt i = 1..n, duy trì sum_i = i(i+1)/2 và fact_i = i!. Cộng sum_i / fact_i vào kết quả.

Độ phức tạp O(n). Giai thừa tăng rất nhanh, double đủ cho n ≤ 170.

Chương trình C++

#include <iostream>
#include <iomanip>
using namespace std;

double calcSeriesSum(int n) {
    double result = 0.0;
    long long sum = 0;
    long long fact = 1;
    for (int i = 1; i <= n; i++) {
        sum += i;
        fact *= i;
        result += (double)sum / fact;
    }
    return result;
}

int main() {
    int n = 12;
    cout << fixed << setprecision(5)
         << "Tong chuoi = " << calcSeriesSum(n); // 4.07742
    return 0;
}

Kết quả

Tong chuoi = 4.07742

Quan sát thêm

Số hạng thứ i: i(i+1)/(2·i!) = (i+1)/(2·(i-1)!). Chuỗi hội tụ nhanh về e/2 ≈ 1.359 cho mỗi số hạng sau, tổng tiến tới giá trị hữu hạn.