計算 S(m) = Σ_{i=1..m} (-1)^{i+1} / i,輸出保留兩位小數。多測試用例。
#include <iostream> #include <iomanip> #include <cmath> using namespace std; int main() { int n; cin >> n; while (n--) { int m; cin >> m; double sum = 0.0; for (double i = 0; i < m; ++i) sum += (1.0 / (i + 1)) * pow(-1.0, i); cout << fixed << setprecision(2) << sum << endl; } return 0; }
pow(-1.0, i) 產生交替符號(i 為 double 避免整數冪溢出/精度問題)。fixed + setprecision(2) 強制輸出兩位小數(四捨五入)。pow:用符號變量 int sign = 1; sign = -sign; 翻轉,更快且精確。prefix[m] 實現 O(1) 查詢。double 足夠兩位小數精度;更高精度可用 long double 或 Kahan 求和。double sum = 0.0; int sign = 1; for (int i = 1; i <= m; ++i) { sum += sign * 1.0 / i; sign = -sign; }
rand()、srand()、random()、/dev/urandom 與現代最佳實踐
Borland C++ Builder 5.0 TrayIcon 元件完整教學:零程式碼實作系統匣圖示