1

任意の長さの数値が与えられた場合、どうすればそのdoubleを出力できますか?結果が10未満である限り、小さい数を掛け合わせる方法は知っていますが、32984335のような大きい整数を掛けて、そのようなものを2倍にするのはどうでしょうか。私はこのようなものを処理する正しい方法を知りません。

4

4 に答える 4

5

これは、実装する必要があるアルゴリズムです。

  1. 現在のカウントを 0 から開始します。
  2. 現在のカウントを 10 倍します。これは、dup を 10 回行ってから、すべての dupe を合計することで実現できます。
  3. 数字を読み取ります。
  4. null の場合は 8 に進みます。
  5. これを実際の数値に変換します。これは 48 を引くことで実現できます。
  6. それを現在のカウントに追加します。
  7. 2に進みます。
  8. 現在のカウントを複製します。
  9. 重複を一緒に追加します。
  10. 引き算を繰り返して 10 で割ります。商と剰余を保持します。
  11. 残りをつかみます。
  12. 数字にします (48 を足します)。
  13. 印刷してください。
  14. 10 から商を取得します。
  15. ゼロでない場合は 10 に進みます。
  16. 終わり。

これらの手順はすべて、基本的な頭脳のイディオムで構成されているため、簡単に実装できます。

于 2012-07-16T14:31:38.527 に答える
0

ここから始めます。入力のバイトを乗算しますが、それを構築して任意の数で機能させることができると思います。基本的には、数値を受け取り、(2) を掛ける数値をネクスト ポインターに格納します。最初の数値を減らしてループし、次に 2 番目の数値を減らしてループをネストします。内側のループの各反復で、ポインターを 2 番目のオペランドの右側にインクリメントします。これがあなたの結果です。

,      take input to ptr 0
  [
     -     decrement first operand (input)
     >++   number to multiply by (2) at ptr 1
     [
        >+   result in ptr 2
        <-   decrement second operand (2)
     ]
     <
  ]
>>     move to result
于 2012-07-16T04:26:36.243 に答える
0

ここに私の BF コードがあります: http://ideone.com/2Y9pk8

->>+>,+
[
    -----------
    [
        -->++++++[-<------>]<
        [->+<[->+<[->+<[->+<[>----<-<+>[->+<]]]]]]>
        [-<++>]<+
        >,+
        [
            -----------
            [->+<]
        ]
        >[-<+>]<
    ]
    <[<]
    >-[<++++++++[->++++++<]>.[-]]
    >[<++++++++[->++++++<]>-.[-]>]
    ++++++++++.[-]
    <+[-<+]
    ->>+>,+
]

EOF まで各行の各数値を読み取り、すべての数値を 2 倍します。

于 2013-03-29T09:30:14.797 に答える