无法理解为什么会产生这样的结果

时间:2013-10-26 06:55:09

标签: c++ c algorithm

“我们不需要按照任何特定顺序枚举分数,我们只需要确保只要循环继续运行,最终将构造每个有理数。那么:

for i=0 to infinity
   for j=1 to i
      display i/j
   next j
next i

你应该能够看到,如果等待的时间足够长,最终会显示每一部分。事实上,由于相同的术语,如1 / 2,2 / 4,我们生成每个分数无限次。 4/8等等......“

为什么输出是1/2,2 / 4等等?我无法弄清楚:((将这个伪代码翻译成C或C ++语言,也许我说得不对:

#include <stdio.h>

int main()
{
  for (int i = 0; i < 100000000000000000; i++) {
     for(int j = 1; j < i; j++) {
        printf("%f\n", (float)(i/j));
     }
}
return 0;
}

2 个答案:

答案 0 :(得分:4)

i/j返回整数结果(然后将其转换为float)。

更改

(float)(i/j)

((float)i)/j

此外,根据您平台上int类型的范围,100000000000000000可能太大而无法容纳int

答案 1 :(得分:2)

  • 为什么输出是1/2,2 / 4等等?

我假设你引用了这句话:

  

事实上,我们正在无限次地生成每个分数   因为相同的术语,如1 / 2,2 / 4。 4/8等等......“

这并不是说输出是1 / 2,2 / 4,4 / 8。它只是说任何特定的分数,例如1/2,在输出中出现无限次。即1/2 == 2/4 == 4/8 == ......等等。