输入两个正整数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比较大时,n*n会溢出,所以 1/n^2 应该用 1/n/n 而不是 1/(n*n)。
溢出问题在今后也会经常碰到,所以要时常注意一下。
代码:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
double sum,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=0;
for(double i=n;i<=m;i++)
{
k=1/i/i;
sum +=k;
}
printf("%.5lf\n",sum);
}
return 0;
}