输入一个正整数N,计算序列 1 - 1/2 + 1/3 - 1/4 + ... 的前N项之和,精确到小数点后三位。在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后3位。题目保证计算结果不超过双精度范围。
时间: 2025-04-05 20:06:42 浏览: 37
### 计算交错序列的前 N 项和
为了实现交错序列 \(1 - \frac{1}{2} + \frac{1}{3} - \frac{1}{4}\) 的前 N 项求和,并按照指定格式输出结果,可以采用如下方法:
#### Python 实现代码
以下是基于 Python 编写的解决方案,该方案通过循环结构完成交替加减操作,并最终以 `sum = S` 格式保留三位小数输出。
```python
n = eval(input("请输入项数 n:"))
s = 0.0
sign = 1 # 初始化符号标志为正号
for i in range(1, n + 1):
s += sign * (1 / i) # 当前项乘以当前符号后累加到总和
sign *= -1 # 切换符号
# 输出结果,保留三位小数
print(f"sum = {s:.3f}")
```
上述代码的核心逻辑在于利用一个变量 `sign` 来控制每一项前面的符号。初始时设置为正值 (`sign = 1`),每次迭代结束后将其取反以便处理下一项[^1]。
---
#### C++ 实现代码
如果偏好使用 C++ 进行开发,则可参考以下代码片段:
```cpp
#include <iostream>
#include <iomanip> // 提供 setprecision 功能
using namespace std;
int main() {
int n;
cout << "请输入项数 n:" << endl;
cin >> n;
double sum = 0.0;
int sign = 1; // 符号初始化为正
for (int i = 1; i <= n; ++i) {
sum += sign * (1.0 / i);
sign *= -1; // 反转符号
}
// 设置精度并打印结果
cout << fixed << setprecision(3) << "sum = " << sum << endl;
return 0;
}
```
此版本同样依赖于循环机制来逐项累积交错序列的结果,同时借助 `<iomanip>` 库中的函数调整浮点数显示的小数位数[^2]。
---
#### 关键点解析
- **符号切换**:无论是哪种语言实现方式,都采用了类似的策略——引入额外变量(如 `sign`),用于动态决定每一步运算应执行加法还是减法。
- **数值范围考虑**:由于涉及除法运算,在某些极端情况下可能会遇到舍入误差等问题;不过对于常规输入规模而言影响较小[^3]。
- **格式化输出**:Python 使用 f-string 或 format 方法设定固定宽度的小数表示形式,而 C++ 借助标准库功能达成相同目标。
---
阅读全文
相关推荐


















