0

16個の64ビット符号なし整数があるとします。作業を行う際には、必要に応じてキャリーをフィードするように注意しています。それらを1つの1024ビット2進数であるかのように、すべてを10進数の1つの文字列に変換するメソッドにフィードできますか?言い換えれば、1つの大きな整数を表す任意の数の整数に対して機能するメソッドを作成することは可能ですか?

処理する最上位ビットがあるため、符号付き整数の方が難しいと思います。数値の残りの「部分」を表すために、最も重要な整数は符号付き整数であり、残りは符号なしであると思います。

(これは別の質問に半関連しています。)

4

3 に答える 3

4

マルチプレシジョンの乗算と除算の必要性を回避するダブルダブルアルゴリズムを使用できます。実際、ウィキペディアのページには、このアルゴリズムのC実装が含まれています。

于 2012-12-14T12:25:39.573 に答える
1

これは少し不明確です。

もちろん、

void print_1024bit(uint64_t digits[]);

これを行うために書くことができます。しかし、標準ライブラリの関数ファミリのいずれかがこれを実行できるかどうかを意味する場合printf()、答えはノーだと思います。

他の質問でおそらく見たように、2進数を別の基数bに変換するコアは、次の2つの演算で構成されています。

  • モジュロb、現在の最下位桁を計算する
  • bで除算し、生成された桁を削除します

数値が0になるまで適用すると、すべての桁が逆の順序で生成されます。

したがって、1024ビット数に対して「モジュロ10」と「10で除算」を実装する必要があります。

たとえば、この例のためだけに8進数に変換する10進数の4711について考えてみます。

  1. 4711%8は7なので、右端の桁は7です。
  2. 4711/8は588です
  3. 588%8は4、次の桁は4
  4. 588/8は73です
  5. 73%8は1
  6. 73/8は9です
  7. 9%8は1
  8. 8/8は1です
  9. 1%8は1
  10. 1/8は0です。これで完了です。

したがって、太字の数字を下から右端の数字に向かって読むと、4711 10 =111478と結論付けられます。電卓を使用してこれを確認するか、私を信頼してください。:)

于 2012-12-14T12:18:03.740 に答える
0

もちろん可能ですが、それほど単純ではありません。

車輪の再発明ではなく、図書館を再利用してみませんか?

GNU Multi PrecisionArithmeticLibraryはそのような可能性の1つです。私自身はそんなものは必要ありませんでしたが、あなたの請求に合うようです。

于 2012-12-14T12:19:01.430 に答える