算法竞赛入门经典(第2版)
第2章 循环结构程序设计
本章有两个难题:习题2-4 子序列之和,习题2-5 分数化小数。
感悟。
1、若全用int,第二组样例会越界。
2、提示:本题有陷阱。容易让人想偏,还是不提示的好,建议再版时删去该话。
3、思考角度,int极限 sqrt(2^31)=sqrt(2)2^15=1.414*32*1024 故655360明显越界;long long 极限sqrt(2^63)=sqrt(2)2^31=1.414*2*1024*1024*1024,故655360还在long long 范围之内。
4、代码中技巧long long i;//将此处int i;改成long long i;即可
5、代码中技巧ans+=1.0/(i*i);通过1.0将等式右边强转为double类型运算。
附上代码,编译环境Dev-C++4.9.9.2
#include <stdio.h>
int main(){
int n,m;
long long i;//将此处int i;改成long long i;即可
double ans;
int kase=0;
while(scanf("%d%d",&n,&m)&&n&&m){
kase++;
ans=0;
for(i=n;i<=m;i++)
ans+=1.0/(i*i);
printf("Case %d: %.5lf\n",kase,ans);
}
return 0;
}