对比这两个代码有什么区别

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:49:03
#include<stdio.h>
void main()
{
int n,i;
double m;
while(scanf("%d",&n)!=EOF)
{
m=0;
for(i=n;i>=1;i--)
m+=1.0/i;
printf("%.12lf\n",m);
}
}

#include<stdio.h>
void main()
{
int n,i;
double m;
while(scanf("%d",&n)!=EOF)
{
m=0;
for(i=1;i<=n;i++)
m+=1.0/i;
printf("%.12lf\n",m);
}
}
前一个可以通过
后一个不行
连接http://acm.fzu.edu.cn/problem.php?pid=1058

我特地注册了一个号码测试了一下,采用的是vc

确实第二个错误了~~~

后来我分析了原因:不是你的问题

是他那里的测试出来的结果是由你第一种类型的代码产生的

那么你要问第一种和第二种有什么不一样了:

那么我举个例子给你看看 你就知道了~~~~(我们的例子精确度到第二位小数点)

第一种方式:0.001+0.002+0.003 = (0.001+0.002)+0.003 =0.00 + 0.003 = 0.00
第二种方式 0.001+0.002+0.003 = 0.001+(0.002+0.003) =0.001 + 0.01 = 0.01

结果就不一样了。

虽然计算机采用的不是简单的四舍五入,不过道理是一样的,你明白就行了~~