計算級數 S = 1 + 1/2 - 1/3 + 1/4 - 1/5 + 1/6 - ... ± 1/n,**只允許使用一個循環**。
sign = (i % 2 == 0) ? 1.0 : -1.0 (i 從 2 開始)。#include <stdio.h>
double calc_series(int n) {
double sum = 1.0; // 首項 1
for (int i = 2; i <= n; i++) {
double term = 1.0 / i; // 當前項 1/i
if (i % 2 == 0) // 偶數分母:加
sum += term;
else // 奇數分母:減
sum -= term;
}
return sum;
}
int main() {
int n;
printf("請輸入項數 n (n>=1): ");
scanf("%d", &n);
printf("前 %d 項和 = %.10f\n", n, calc_series(n));
return 0;
}
double calc_series_opt(int n) {
double sum = 1.0;
double sign = 1.0; // i=2 時為正
for (int i = 2; i <= n; i++) {
sum += sign / i;
sign = -sign; // 翻轉符號
}
return sum;
}
標準萊布尼茨級數 π/4 = 1 - 1/3 + 1/5 - 1/7 + ... (奇數項交替)。
本題級數可改寫為:S = 1 + Σ(k=1 to ∞) [1/(2k) - 1/(2k+1)]
收斂至 1 + (1 - ln 2) = 2 - ln 2 ≈ 1.30685。
驗證:calc_series(1000000) ≈ 1.306852819。