输入两个正整数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。注意:本题有陷阱。
分析:还是for循环累加。
本题陷阱在于n比较大时,n*n会溢出,所以 1/n^2 应该用 1/n/n 而不是 1/(n*n)。
#include <stdio.h>
int main(){
int n,m;
double sum=0.000000000;
while(scanf("%d%d",&n,&m)==2){
if(n<m&&m<1000000){
while(n<=m){
sum+=1.0000000/n/n;
n++;
}
}else{
break;
}
printf("%.5lf\n",sum);
sum=0.000000000;
}
return 0;
}
1当乘法溢出的时候就会得到特殊的答案
2注意结果是double型的计算过程中数字要加小数点