题目
使用莱布尼茨级数公式估算圆周率 π 的近似值,累加计算前 n 项。公式为:π/4 = 1 - 1/3 + 1/5 - 1/7 + ...
输入格式:一行输入一个正整数 n,表示累加项数。
输出格式:输出保留 6 位小数的浮点数,表示估算出的 π 值,末尾换行。
数据范围与约定:1 ≤ n ≤ 107。
思路与算法
1. 级数通项规律
第 i 项(i 从 1 开始)的分母为 2*i - 1,符号正负交替出现。通项可表示为 (-1)^(i-1) / (2*i - 1)。
2. 浮点精度与符号迭代
使用 double 保证高精度浮点累加。符号交替可通过 sign = -sign 在循环中翻转,避免调用开销较大的 pow() 函数。最后将累加和乘以 4 即得 π 近似值。
完整程序
#include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
double sum = 0.0;
int sign = 1;
// 莱布尼茨级数通项:分母为奇数 2k-1,符号正负交替
for (int k = 1; k <= n; k++) {
// 1.0 强制转为浮点除法,保留小数精度
sum += sign * 1.0 / (2 * k - 1);
// 符号翻转:避免调用 pow(-1, k) 带来额外开销
sign = -sign;
}
// 级数收敛于 π/4,累加结果乘以 4 得到 π 的近似值
printf("%.6f\n", sum * 4.0);
return 0;
}运行示例
输入:
1000输出:
3.140593