2013-01-12 12 views

答えて

4

ごとに3桁のバイナリ(0または1は)(0から7に)正確に一つの8進数を表します。すべての3つの以降の文字を反復処理し、1 8進数に変換:文字列の長さがない場合は最初に取られる必要がある

"000" -> "0" 
"001" -> "1" 
"010" -> "2" 
"011" -> "3" 
... 
"111" -> "7" 

エクストラケア

は、だから私はアルゴリズムがシンプルだと思います例:

"1001001110" 

"10|101|001|110" 
    2| 5| 1| 6 

この方法では、文字列の解析と余分なメモリの必要はありません。任意の長い入力に対応し、超高速です

+1

"これは任意の長い入力に対応できますが、事前に長さを知っている場合に限ります。 – Henry

+0

@Henry:そうです、+1。私は長さについて言及しているが、強調してくれてありがとう。一方、サイズをあらかじめ知ることなく*することはできません。少なくとも、すべてを解析する必要はありません。 –

5

あなたのソリューションで使用するとより適切なBigIntegerクラスの使用を得ることができます。それは基数(あなたの基数= 8)をとるオーバーロードされたtoString()メソッドを持っています。

String largeBinary = "10101010100000100111011010101"; 
String octalVersion = (new BigInteger(largeBinary,2)).toString(8); 
1

long値は、多くの用途のために十分である、2^63-1までの任意の数を保持することができます。あなたが行う必要があるのは、parseLong(String string, int radix)メソッド(およびtoString(Long number, int radix)メソッド)に適切なの基数パラメータを指定することだけです。

long number = Long.parseLong(binaryString, 2); 
String octalString = Long.toOctalString(number); // or Long.toString(number, 8); 
+0

私はほとんど64ビットを "非常に大きい"と呼ぶでしょう。 – Bohemian

+0

それは文脈によって異なります。 OPは環境や境界を特定せずに「大2進数字」を要求した。私のポストは、それが適用可能な制約を定義しています。それに基づいて、ソリューションを探している人は、そのコンテキストに基づいて動作するかどうかを判断できます。 – matsev

関連する問題