web-dev-qa-db-ja.com

ベース10からベースnへの変換

基本変換を行うC++プログラムを記述しようとしています。

10進数を2から20までの他のすべての整数の底に変換したい。

基本変換のための効率的で実装が簡単なアルゴリズムはありますか?

問題の正確な場所がわかりませんか?基本変換を行うのは非常に簡単で非常に簡単です。手動で行うように行います。

  • numberbaseで除算します
  • 残りを書き留めます
  • 除算の整数部分でプロセスを繰り返す
  • あなたがゼロに達したときに停止します
  • 残りは逆順でbaseの数字が得られます

例:

1025(10進数)から基数15:

1025 / 15 = 68 , remainder 5
68   / 15 =  4 , remainder 8
4    / 15 =  0 , remainder 4

基数15の数値は485です

33
penelope

次の2つの問題がある可能性があります。

  • 元のベースからコンピューターのネイティブ整数表現への解析(strtolはこれで非常に優れています)。

  • 新しいベースにフォーマットします。 (itoaはこれがかなり得意です)。

自分で作成したい場合は、 div function をお勧めします。数値とベースを入力すると、右端の桁が分割されます。すべての桁を取得するために繰り返します。

より効率的にしたい場合は、2乗法で除算し、一度に2桁を取得できます(ルックアップテーブルを使用して、両方の桁のASCII文字を取得します)。 これはいくつかの非常に効率的な実装の例です。 別のベースを使用するように変更することは難しくありません。

3
Ben Voigt