は、再帰的なソリューションです。ここ
public class Class {
private static String intToBinary(final int input, final int count) {
int powerOf2 = (int) Math.pow(2, count);
if (count < 0) {
return "";
} else if (input < powerOf2) {
return "0" + intToBinary(input, count - 1);
} else {
return "1" + intToBinary(input - powerOf2, count - 1);
}
}
public static String intToBinary(final int input) {
return intToBinary(input, (int) Math.ceil(Math.log(input)/Math.log(2)));
}
public static void main(String... args) {
System.out.println(intToBinary(7));
System.out.println(intToBinary(8));
System.out.println(intToBinary(100));
System.out.println(intToBinary(1234567890));
}
}
は、whileループで同じアルゴリズムである:
public class Class {
public static String intToBinary(final int input) {
int count = (int) Math.ceil(Math.log(input)/Math.log(2));
int remaining = input;
final StringBuilder output = new StringBuilder();
while (count >= 0) {
final int powerOf2 = (int) Math.pow(2, count);
if (remaining < powerOf2) {
output.append("0");
} else {
output.append("1");
remaining -= powerOf2;
}
count--;
}
return output.toString();
}
public static void main(String... args) {
System.out.println(intToBinary(7));
System.out.println(intToBinary(8));
System.out.println(intToBinary(100));
System.out.println(intToBinary(1234567890));
}
}
を試してみてくださいされていません –
'decimal'を2で割ったままにすると、外側のループが終了しないように*決して* 256に達しません。解決策:外側ループの一時変数に 'decimal 'をコピーし、内側ループに一時変数を使用します。 –
あなたはいくつかの中括弧などを忘れてしまったと思います。forループの下のコードはすべてボディの一部です。それがそうであれば、それが0になるまで 'decimal'を減らすべきではありません_inside_> 256までループするループ。 – Thomas