作为中间竞争问题之一,我们的任务是列出所有带有“ n”个数字的二进制序列,直至达到最大值。例如,如果输入是
3
(3位数字),则输出为
000
001
010
011
100
101
110
111
我面临的问题是我不知道如何解决这个问题。以前,我可以使用递归创建一个方法来检查每个前一位数字,但无法使该方法可扩展。
答案 0 :(得分:2)
import java.util.Scanner;
import java.util.stream.IntStream;
public class MainClas {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
IntStream.range(0, (int) Math.pow(2, n))
.forEach(i -> {
String s = String.format("%" + n + "s", Integer.toBinaryString(i)).replace(' ', '0');
System.out.println(s);
});
}
}
输入:
3
输出:
000
001
010
011
100
101
110
111
答案 1 :(得分:1)
我创建了一个简单的解决方案,可以打印您的预期输出。
public class PrintBinaryTest {
public static void main(String[] args) {
printBinaryNumbers(3);
}
public static void printBinaryNumbers(int digits) {
int maxNr = (int) (Math.pow(2, digits) - 1);
for (int i = 0; i <= maxNr; i++) {
System.out.println(getBinaryRepresentationWithLeadingZeros(i, digits));
}
}
public static String getBinaryRepresentationWithLeadingZeros(int nr, int digits) {
String binaryString = Integer.toBinaryString(nr); // without leading zeros
String formatString = "%" + digits + "s";
return String.format(formatString, binaryString).replace(' ', '0');
}
}