本文共 692 字,大约阅读时间需要 2 分钟。
习题2-8 子序列的和(subsequence)
输入两个正整数n<m<10^6,输出 1/n^2 + 1/(n+1)^2 + ... + 1/m^2,保留5位小数。例如n=2, m=4时答案是0.42361; n = 65536, m = 655360时答案是0.00001。注意:本题有陷阱。
#include//#define LOCALint main() { double n, m; double s; int kase = 0; //不能写在循环 里面 #ifdef LOCAL freopen("C:\\Users\\zhangwei\\Desktop\\input.txt","r",stdin); freopen("C:\\Users\\zhangwei\\Desktop\\output.txt","w",stdout); #endif while(scanf("%lf%lfd",&n,&m) == 2 && !(m == 0 && n == 0)){ s = 0; while(n <= m){ s += 1.0 / (n*n); //括号 不要忘记 //另一种方法 可以定义整形 n,m 需要写成 1.0/n/n;的形式 防止溢出 n++; } printf("Case %d: %.5lf\n",++kase, s); } return 0; } // 陷阱在于 整数过大 平方可能溢出 需要用浮点数
转载地址:http://daimi.baihongyu.com/