子序列和

来源:互联网 发布:公交大数据应用 编辑:程序博客网 时间:2024/06/05 18:44

习题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。注意:本题有陷阱。


陷阱在于 输入的  n 和 m  平方后 过大 会溢出 所以 应该选择 浮点数

#include<stdio.h>//#define LOCALint main(){double n, m;  double s;int kase = 0; //不能写在循环 里面 #ifdef LOCALfreopen("C:\\Users\\zhangwei\\Desktop\\input.txt","r",stdin);freopen("C:\\Users\\zhangwei\\Desktop\\output.txt","w",stdout);#endifwhile(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;} // 陷阱在于 整数过大 平方可能溢出 需要用浮点数

原创粉丝点击