2進数から10進数(膨大な数の場合)

ロマンペレイラ

私は大きな整数でCライブラリを構築しています。基本的に、私はその中の任意の整数をバイナリ表現から10進数に変換するための高速アルゴリズムを探しています

JDKのBiginteger.toString()実装を見ましたが、数値を任意の基数に変換するために作成されたため、かなり重く見えます(各桁に除算を使用するため、数千桁を処理する場合はかなり遅くなります)。

それで、あなたがそれについて共有するためのドキュメンテーション/知識を持っているならば、私はそれを読んでうれしいです。

編集:私の質問についてより正確に:

  • Pをメモリアドレスとします

  • NをPで割り当てられた(そして設定された)バイト数とします。

アドレスPのNバイトで表される整数(簡単にするためにリトルエンディアンとしましょう)をC文字列に変換する方法

例:

  • N = 1

  • P =「00101010」を格納するランダムメモリアドレス

  • out string = "42"

まだあなたの答えをありがとう

ステファン・ハウスタイン

BigInteger.toStringメソッドが重く見える理由は、チャンクで変換を行うためです。

簡単なアルゴリズムでは、最後の桁を取得し、残りがなくなるまで大きな整数全体を基数で除算します。

これに関する1つの問題は、大きな整数の除算は非常に高価であるため、数値は通常の整数の除算(BigIntの除算ではなく)で処理できるチャンクに分割されることです。

static String toDecimal(BigInteger bigInt) {
  BigInteger chunker = new BigInteger(1000000000);
  StringBuilder sb = new StringBuilder();
  do {
    int current = bigInt.mod(chunker).getInt(0);
    bigInt = bigInt.div(chunker);
    for (int i = 0; i < 9; i ++) {
      sb.append((char) ('0' + remainder % 10));
      current /= 10;
      if (currnet == 0 && bigInt.signum() == 0) {
        break;
      }
    }
  } while (bigInt.signum() != 0);
  return sb.reverse().toString();
}

とは言うものの、固定基数の場合、コメントで示唆されているように、「ダブルダブル」アルゴリズムをニーズに移植する方がおそらくさらに良いでしょう:https:  //en.wikipedia.org/wiki/Double_dabble

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2の補数を含む10進数から2進数

分類Dev

10進数から2進数への関数、Python

分類Dev

Javaでの10進数から2進数への変換

分類Dev

Javaでの10進数から2進数への割り当て

分類Dev

Cでの10進数から2進数への変換

分類Dev

C ++での2進数から10進数への変換

分類Dev

2進数のASCIIから10進数への変換

分類Dev

2進数のASCIIから10進数への変換

分類Dev

10進数からcの2進数への障害

分類Dev

負の10進数から2進数のcコード

分類Dev

10進数から2進化10進数

分類Dev

奇妙な16進数から10進数への変換

分類Dev

10進数から2進数への変換

分類Dev

10進数から2進数の自己チャレンジ

分類Dev

10進数から2進数のPythonアルゴリズム

分類Dev

2進数から10進数へのc

分類Dev

コンピューターの10進数から2進数

分類Dev

10進数から2進数への変換C ++

分類Dev

2進数から10進数への再帰

分類Dev

10進数から2進数へのコンバーター

分類Dev

10進数から2進数への変換エラー

分類Dev

10 進数から 2 進数への変換

分類Dev

10進数から2進数の間違った出力

分類Dev

Cの2進数から12進数および16進数

分類Dev

10進数から2進数:2の補数、ネガの表現の改善

分類Dev

Excelでの大きな10進数から2進数への変換-数式のみ(VBAなし)

分類Dev

数値が10進数または2進数ではなく整数の場合、WriteLineがタブをスキップするのはなぜですか

分類Dev

数値を10進数から2進数に変換する

分類Dev

10進数から16進数-Java

Related 関連記事

ホットタグ

アーカイブ