0

“我们不需要以任何特定的顺序枚举分数,我们只需要确保只要循环继续进行,每个有理数最终都会被构造出来。那么:

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

2 回答 2

4

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

改变

(float)(i/j)

((float)i)/j

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

于 2013-10-26T06:57:09.860 回答
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 == ... 等等。

于 2013-10-26T07:24:41.393 回答