北大-计算概论
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);
}
解决大数计算问题的代码优化
本文讨论了一个关于大数计算的问题,作者通过将原始的整型变量更改为double类型,成功解决了输出结果与样例不符的问题。文章详细解释了整型变量溢出的原因,并提供了使用double类型的解决方案。
2188

被折叠的 条评论
为什么被折叠?



