任意の長さの数値が与えられた場合、どうすればそのdoubleを出力できますか?結果が10未満である限り、小さい数を掛け合わせる方法は知っていますが、32984335のような大きい整数を掛けて、そのようなものを2倍にするのはどうでしょうか。私はこのようなものを処理する正しい方法を知りません。
1670 次
4 に答える
5
これは、実装する必要があるアルゴリズムです。
- 現在のカウントを 0 から開始します。
- 現在のカウントを 10 倍します。これは、dup を 10 回行ってから、すべての dupe を合計することで実現できます。
- 数字を読み取ります。
- null の場合は 8 に進みます。
- これを実際の数値に変換します。これは 48 を引くことで実現できます。
- それを現在のカウントに追加します。
- 2に進みます。
- 現在のカウントを複製します。
- 重複を一緒に追加します。
- 引き算を繰り返して 10 で割ります。商と剰余を保持します。
- 残りをつかみます。
- 数字にします (48 を足します)。
- 印刷してください。
- 10 から商を取得します。
- ゼロでない場合は 10 に進みます。
- 終わり。
これらの手順はすべて、基本的な頭脳のイディオムで構成されているため、簡単に実装できます。
于 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 に答える