习题2-4 子序列的和(subsequence)
输入两个正整数n<m<106,输出 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。提示:本题有陷阱。
样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001
#include <stdio.h>
double SubseQuence(int n,int m);
int main()
{
int n,m,count=0;
while(scanf("%d %d",&n,&m)&&(n || m))
{
printf("Case %d: %.5lf\n",++count,SubseQuence(n,m));
}
return 0;
}
double SubseQuence(int n,int m)
{
double sum;
for (int i = n; i < m + 1; i++)
sum += 1/(double)(i) * 1/(double)(i); // sum += 1.0/(i*i); 这样写i*i可能会溢出
// 此处更简洁的写法应该是 sum += 1.0/i/i
return sum;
}