子序列的求和–算法竞赛经典习题2-4:输入两个正整数n<m<106,输出1/n2+1/(n+1)2+…+1/m2,保留5位小数。输入包含多组数据,结束标记为n=m=0。(C++实现)
样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001
思路:
本题较为求和Sum问题多来一些步骤与判断,稍微复杂一点点。
1.先判定结束标记问题,n=m=0,做while判读即可。
2.对求和实现累加,与Sum问题类似。
3.输出的精度问题,需要添加iomanip库,使用setprecision方法设置精度。
代码如下所示:
#include#include using namespace std; int main() { double n, m, t = 0; int i=0; cin >> n >> m; while (!(n == 0 && m == 0)) //判断结束条件 { for (; n <= m; n++) //累加 { t += 1 / (n * n); } cout << fixed << setprecision(5) <<"Case " <<++i<<":" << t << endl; //设置输出格式 t = 0; cin >> n >> m; } return 0; }
运行结果如下图所示:
新手驾到,多指教!



