c++ - 想不通为什么会产生这样的结果

标签 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;
}

最佳答案

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

改变

(float)(i/j)

((float)i)/j

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

关于c++ - 想不通为什么会产生这样的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603879/

相关文章:

c++ - 直接从 RAM 发送原始数据

c++ - 如何实现相互引用的类?

c - fgets 不读取整行

java - 在一个函数中将具有不同数据类型的不同集合转换为由指定分隔符分隔的字符串

algorithm - 数据文件没有显示实际输出

javascript - 在通过 javascript 以扩展形式写入数字时打印出额外的 0

c++ - 移动 vec3 的维度

c++ - 这个 for 循环可以用预处理器完成吗?

c - 如何在 mingw 编译器中使用 inet_pton()?

c - C中字符串的十六进制