您的位置:首页 > 其它

求分数序列和:int求和,小心溢出

2014-03-30 20:41 411 查看
北大-计算概论
http://ica.openjudge.cn/baseb/04/
看到题目后,第一反应是:这题简单啊,做过好多遍了。于是,刷刷刷就把代码写完了:

#include<stdio.h>
main()
{
int zi,mu,i,n,t;
double sum;

scanf("%d",&n);
zi=2;
mu=1;
sum=0;
for(i=0;i<n;i++)
{
sum=sum+1.0*zi/mu;
t=mu;
mu=zi;
zi=t+zi;
}
printf("%.4lf\n",sum);
}


输入99,输出的结果却和sample不一样。

于是用tc单步调试,发现运行一段时间后sum会神奇般的变小。反应过来了,int的32767果然太小。

可是换成long,照样不行。

换成double,AC.

#include<stdio.h>
main()
{
int i,n;
double mu,zi,t;//看这儿!
double sum;

scanf("%d",&n);
zi=2;
mu=1;
sum=0;
for(i=0;i<n;i++)
{
sum=sum+1.0*zi/mu;
t=mu;
mu=zi;
zi=t+zi;
}
printf("%.4lf\n",sum);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: