子序列的和(subsequence)

输入两个正整数n<m<106,输出 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。提示:本题有陷阱。

样例输入:
2 4
65536 655360
0 0
样例输出:
Case 1: 0.42361
Case 2: 0.00001

陷阱是:当n很大时n*n会很大,所以应该分两次除
#include<stdio.h>
#include<math.h>
int main()
{
    int m,n,i,count=0;
    double sum;
    while(scanf(“%d%d”,&n,&m)!=EOF&&n&&m&&n<m)
    {
        sum=0;
        count++;
        for(i=n;i<=m;i++)
        {
           sum+=1.0/i/i;
        }
        printf(“Case %d:%.5f\n”,count,sum);
    }
    return 0;
}

点赞