牛客网NC22157:牛牛学数列2
📝 题目描述

🔍 输入输出说明
输入描述:
- 输入一个整数 N,范围在 0 到 1000
输出描述:
- 输出一个保留6位小数的浮点数
示例:
- 输入:
2
- 输出:
1.500000
💡 解题思路
这是一个经典的调和级数求和问题。调和级数是形如 1 + 1/2 + 1/3 + ... + 1/n 的级数。
解题思路非常直接:
- 读取输入的整数 N
- 使用循环从 1 到 N,累加每一项 1/i 的值
- 按照要求格式输出结果(保留6位小数)
✅ 代码实现
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
double s = 0; // 初始化求和变量
// 循环累加每一项
for(int i = 1; i <= n; i++)
s += 1.0 / i;//注意使用 `1.0` 而不是 `1`,确保进行浮点数除法
// 按要求格式输出
printf("%.6f", s);
return 0;
}
📌 代码详解
#include<bits/stdc++.h>
- 包含了大部分常用的C++标准库,简化了引入头文件的过程- 定义整数变量
n
接收输入 - 定义
double
类型变量s
用于存储求和结果 - 使用
for
循环从 1 到 n 遍历,累加 1/i 项- 注意使用
1.0
而不是1
,确保进行浮点数除法
- 注意使用
- 使用
printf("%.6f", s)
输出结果并保留6位小数
🔖 知识点总结
- 调和级数:形如 1 + 1/2 + 1/3 + ... + 1/n 的级数
- 浮点数精度控制 :使用
printf("%.6f", s)
控制输出的小数位数 - 类型转换 :使用
1.0
确保浮点数除法,避免整数除法截断
📚 拓展思考
当 N 非常大时,调和级数的增长非常缓慢,这是一个发散级数,但发散速度很慢。实际上,调和级数与自然对数有密切关系,当 N 趋向无穷大时,其近似值为 ln(N) + γ,其中 γ ≈ 0.57721 是欧拉常数。
在实际编程中,当 N 很大时,可能需要考虑精度和溢出问题,但本题中 N 最大为 1000,使用 double 类型足以满足要求。
希望这篇详解对你有所帮助!如有疑问,欢迎在评论区留言交流。