大きな 10 進数を 2 進数に変換する必要があります。これを行うにはどうすればよいですか? 問題の10進数はこれです 3324679375210329505
3079 次
6 に答える
5
に行きたくなるかもしれませんBigDecimal
。
BigDecimal は、スケーリングされていない任意精度の整数値と 32 ビットの整数スケールで構成されます。toString()メソッドは、BigDecimal の正規表現を提供します。
new BigDecimal("3324679375210329505").toString(2);
于 2011-06-14T00:19:26.513 に答える
5
どうですか:
String binary = Long.toString(3324679375210329505L, 2);
于 2011-06-14T00:28:53.157 に答える
1
于 2011-06-14T00:24:08.217 に答える
0
少し無意味ですが、Cでの解決策は次のとおりです。
void to_binary(unsigned long long n)
{
char str[65], *ptr = str + 1;
str[0] = '\n';
do{
*ptr++ = '0' + (n&1);
} while(n >>= 1);
while(ptr > str)
putc(*--ptr, stdout);
}
たとえば、次のように出力されます。
10111000100011101000100100011011011111011110101011010110100001
編集:そして、先行ゼロを気にしないのであれば...
void to_binary(unsigned long long n)
{
do{ putc('0' + (n>>63), stdout); } while(n <<= 1);
}
于 2011-06-14T00:43:56.987 に答える
0
ビルトインと同じように負の数を処理する高速なもの ( よりも 50% 以上高速で、 よりもLong.toString(n, 2)
150 ~ 400% 高速) が必要な場合は、次のことを試してください。BigInteger.toString(2)
static String toBinary (long n) {
int neg = n < 0 ? 1 : 0;
if(n < 0) n = -n;
int pos = 0;
boolean[] a = new boolean[64];
do {
a[pos++] = n % 2 == 1;
} while ((n >>>= 1) != 0);
char[] c = new char[pos + neg];
if(neg > 0) c[0] = '-';
for (int i = 0; i < pos; i++) {
c[pos - i - 1 + neg] = a[i] ? '1' : '0';
}
return new String(c);
}
実際の 2 の補数バイナリ表現long
(先頭に 1 または 0 がある) が必要な場合:
static String toBinaryTC (long n) {
char[] c = new char[64];
for(int i = 63; i >= 0; i--, n >>>= 1) {
c[i] = n % 2 != 0 ? '1' : '0';
}
return new String(c);
}
于 2011-06-14T01:49:25.967 に答える
0
スタックを使用します。10 進数が偶数か奇数かを確認し、偶数の場合は 0 をスタックにプッシュし、奇数の場合は 1 をスタックにプッシュします。次に、10 進数が 1 に達すると、スタックから各値をポップして、それぞれを出力できます。
以下は、参照用の非常に非効率的なコード ブロックです。おそらく、integer の代わりに long を使用する必要があります。
import java.util.Stack;
public class DecBinConverter {
Stack<Integer> binary;
public DecBinConverter()
{
binary = new Stack<Integer>();
}
public int dec_Bin(int dec)
{
if(dec == 1)
{
System.out.print(1);
return 0;
}
if(dec == 0)
{
System.out.print(0);
return 0;
}
if((dec%2) == 0)
{
binary.push(0);
dec = dec/2;
}
else
{
binary.push(1);
dec = dec/2;
}
while(dec != 1)
{
if((dec%2) == 0)
{
binary.push(0);
dec = dec/2;
}
else
{
binary.push(1);
dec = dec/2;
}
}
if((dec%2) == 0)
{
binary.push(0);
dec = dec/2;
}
else
{
binary.push(1);
dec = dec/2;
}
int x = binary.size();
for(int i = 0; i < x; i++)
{
System.out.print(binary.pop());
}
return 0;
}
}
于 2011-06-14T01:49:50.667 に答える