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 returns integer result (which you then cast to float).

Change

(float)(i/j)

to

((float)i)/j

Also, depending on the range of the int type on your platform, 100000000000000000 is likely to be too large to fit in an 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 に答える