子序列的求和–算法竞赛经典习题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 <iostream>
#include <iomanip>
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;
}
运行结果如下图所示:
新手驾到,多指教!