パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

ループ、再帰、gotoを使わずに1から100までを印字するC++プログラムは書けますか?」記事へのコメント

  • C言語レベルですが

    #include <iostream>
    #define macro1 std::cout << x++ << std::endl
    #define macro4 macro1; macro1; macro1; macro1
    #define macro20 macro4; macro4; macro4; macro4; macro4
    #define macro100 macro20; macro20; macro20; macro20; macro20
    int main() { int x = 1; macro100; return 0;}

    100=5×5×4って、ことで、3回に分けてloop unroll

    • by Anonymous Coward

      これ、macro1をprintf("%d\n", x++);にすればC言語で行けるのでは

      • C言語でいけますね.
        親コメント
        • 最初C言語で書いてたんですが、書き上げたところで「あっ、C++か」と、申し訳程度にiostreamに変えました。
          元のコードは

          #include <stdio.h>
          #define macro1(x) printf("%d\n", (x))
          #define macro4(x) do { macro1((x)); macro1((x)+1); macro1((x)+2); macro1((x)+3); } while (0)
          #define macro20(x) do { macro4((x)); macro4((x)+4); macro4((x)+8); macro4((x)+12); macro4((x)+16); } while (0)
          #define macro100(x) do { macro20((x)); macro20((x)+20); macro20((x)+40); macro20((x)+60); macro20((x)+80); } while (0)
          int main() { macro100(1); return 0;}

          こんなの。iostreamに変えるついでに、コードを出来るだけ短くしたのが元のコメントです。

          あとは、もうちょっと変態なので

          #include <stdio.h>
           
          #define num1(x) #x "\n"
          #define num2(x, y) num1(x##y)
          #define num3(x, y, z) num2(x, y##z)
           
          #define str_1_9 \
                  num1(1) num1(2) num1(3) num1(4) \
                  num1(5) num1(6) num1(7) num1(8) num1(9)
           
          #define str_x0_x9(x) \
                  num2(x,0) num2(x,1) num2(x,2) num2(x,3) num2(x,4) \
                  num2(x,5) num2(x,6) num2(x,7) num2(x,8) num2(x,9)
           
          #define str_10_99 \
                  str_x0_x9(1) str_x0_x9(2) str_x0_x9(3) str_x0_x9(4) str_x0_x9(5) \
                  str_x0_x9(6) str_x0_x9(7) str_x0_x9(8) str_x0_x9(9)
           
          #define str_100 num3(1,0,0)
           
          #define str_1_100 str_1_9 str_10_99 str_100
           
          int main() {
                  fputs(str_1_100, stdout);
                  return 0;
          }

          なんてのも書いてみたんですが、「1~100って面倒だよなぁ。0~99ならもっと簡単なのに」と思いつつ没ったのでした。

          親コメント
    • by Anonymous Coward

      これは現場で見たら頭抱える/(^o^)\

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...