题目:
输入两个正整数 n < m < 10^6 , 输出 1 / n2 + 1 / (n + 1)2 + ...+ 1 / m2,保留5位小数。输入包含多组数据,结束标记为 n = m = 0 。提示:本题有陷阱。
样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001
思路:
陷阱还是在于乘法溢出。若是用常规方法,将分母乘起来,然后在除,那么无论如何,都是溢出。解决方法:将分母连除两次即可。
代码:
#include <iostream>#include <iomanip>using namespace std; int main(){ int n = 0, m = 0; int kase = 0; while ((cin >> n >> m) && n && m) { double sum = 0.0; for (int i = n; i <= m; ++i) { sum += static_cast<double >(1) / i / i; } cout << "Case " << ++kase << ": "; cout << setprecision(5) << fixed << sum << endl; } return 0;}
原文地址:https://www.cnblogs.com/Hello-Nolan/p/12122156.html
时间: 2024-11-15 23:24:15