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

来源:互联网 发布:网络外包公司 编辑:程序博客网 时间:2024/05/16 05:21

北大-计算概论

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);}


0 0
原创粉丝点击