2017-04-26 5 views
-3

2^kベースで書かれた非常に大きな数字に対処する必要があります。私は配列ベースの表現を作った。 751はlong [] {0,7,5,1}、-751はlong [] {1,7,5,0}と表されます。バイナリへの配列として書かれた番号

私の質問は、どのようにバイナリ表現に変換するのですか? BigIntegerに変換して分割しないようにしたいと思います。 負数の場合は2の補数が必要です。

+2

注:短い番号を保存するには、4桁を使用します。これは本当にメモリに優しいわけではありません。 – AxelH

+2

このような配列を何かに変換するためのボックスメソッドはありません...これらの値を分割してモジュール化することになります.... –

+0

ウェブ上のテーマに関するチュートリアル/コースの多く... –

答えて

0

これは決してベース-2^kエンコーディングではありません。それはベース10符号化である:

751で表されるように長い[] {0、7、5、1}基部10において、 751であるので、7×10^2 + 7 * 10^1 + 1 * 10^0

このベース16符号化されるであろう:

1873は ため、ベース16に限り、[] {0、7、5、1}表され1873は7 * 16^2 + 5 * 16^1 + 1 * 16^0

value = n[0]*(2^(k*(n.length-1)) + ... + [n.length-1] 

(あなたが本当の生活の中で何をするのかしていない:あなたはBigIntegerのを使用する)ようにlong[] nは、ベース2^k個であると仮定すると、バイナリへの変換が十分に単純である

StringBuilder binaryString = new StringBuilder(); 
for (long l : n) { 
    binaryString.append(binaryFor(l)); 
} 

つまり、各配列要素をバイナリ文字列に変換してすべてを連結するだけです。

整数を配列で符号化するより良い方法は、ユニットをn [length-1]ではなくn [0]に配置することです。追加の代わりにprependを使用する必要があります。

関連する問題