2

10進数を3進数に変更する方法はありますか?つまり、モジュロと除算の方法を使用したくないということです。10進数が非常に大きく、128123832812381835828638486384863486.............1237127317237などです。

また、bigintsを使用したくない。

方法はありますか?

4

1 に答える 1

4

除算/モジュロを使用する必要はありません。代わりに、低い値から高い値まで、入力数字を反復処理します。各桁位置について、最初1000....000に出力表現の内容を計算します (前の 10 の累乗の 10 倍です)。次に、その結​​果に数字を掛けて、出力表現に累積します。

出力表現で乗算と加算を実行するルーチンが必要になります。乗算ルーチンは、加算ルーチンの観点から記述できます。

例:

246 (base-10) を base-3 に変換します。

出力 "accumulator" を初期化することから始めますa = "0"

「乗数」を初期化しm = "1"ます。

"101"出力表現に10 があることにも注意してください。

最初の桁は 6ですd = "20"

  • 乗算: t = d * m = "20" * "1" = "20".
  • 蓄積: a = a + t = "0" + "20" = "20".
  • 乗数の更新: m = m * "101" = "1" * "101" = "101"

2 桁目は 4ですd = "11"

  • 乗算: t = d * m = "11" * "101" = "1111".
  • 蓄積: a = a + t = "20" + "1111" = "1201".
  • 乗数の更新: m = m * "101" = "101" * "101" = "10201"

3 桁目は 2ですd = "2"

  • 乗算: t = d * m = "2" * "10201" = "21102".
  • 蓄積: a = a + t = "1201" + "21102" = "100010".

答えは"100010"です。

于 2011-04-29T15:33:55.493 に答える