まあ、2通りの方法があります。最初の1:
System.out.println(Integer.toBinaryString(x));
秒:
StringBuilder sb = new StringBuilder();
while (x > 0) {
sb.append(x%2);
x = x/2;
}
sb.reverse();
System.out.println(sb.toString());
OK、私はStringBuilder
をご紹介しましょう。これは、効率的に追加するクラスですString
は、toString()
メソッドでいつでも返すことができます。追加はappend()
で行われ、任意のプリミティブを引数として取ることができ、String
も可能です。
上記のコードは言う:
- が新しい
StringBuilder
を作成します。
- 数値がまだ0より大きい場合は、
String
x%2を追加します。
String
は、現在のソリューションとまったく同じであるため、これを元に戻す必要があります。また、StringBuilder
によって提供されています。
- 作成したばかりの文字列である
sb.toString()
を単に印刷してください。
数字が最大8ビットであると仮定していることがわかります。その場合は、StringBuffer
をchar[8]
に置き換えて記入してから、逆に読むことができます。
char[] buff = new char[8];
for (int j = 0; j <= 7; j++) {
buff[j] = x%2;
x=x/2;
}
boolean onePrinted = false;
for (int j = 7; j>=0; j--) {
if (onePrinted) {
IO.print(buff[j]);
} else if (buff[j] == 1) {
IO.print(buff[j]);
onePrinted = true;
}
}
if (!onePrinted) {
IO.print(0);
}
OK、OPの特別なリクエストに対しては、より簡単な方法です。
int countZeros = 0;
while (x%2 == 0) {
x = x/2;
countZeros++;
}
int temp = 0;
while (x>0) {
temp = temp*2;
temp += x%2;
x = x/2;
}
while (temp > 0) {
System.out.print(temp%2);
temp = temp/2;
}
for (int i = 0; i < countZeros; i++) {
System.out.print(0);
}
私は彼がそれを使うことができないのではないかと心配しています:p – xenteros
ライブラリを使用できず、プリミティブで計算することができない場合は、まったくそれを行うことはできません。 – doug65536
私はプリミティブでしかアルゴリズムを見つけられませんでしたが、私は彼がどの大学に加入しているのか知りたいです。私は教授のチェアを申請したいと思います。 – xenteros