我有一种方法可以打印出二进制形式的数字:
private static void binary(int n){
for(int i = 1; i < Math.pow(2, n); i++)
System.out.println(Integer.toBinaryString(i));
}
}
输出类似于 n = 3:
1
10
11
100
101
110
111
有没有办法像这样打印出来:
001
010
011
100
101
110
111
我有一种方法可以打印出二进制形式的数字:
private static void binary(int n){
for(int i = 1; i < Math.pow(2, n); i++)
System.out.println(Integer.toBinaryString(i));
}
}
输出类似于 n = 3:
1
10
11
100
101
110
111
有没有办法像这样打印出来:
001
010
011
100
101
110
111
private static void binary(int n){
String t = ""; int N = 1<<n;
for (int i=0; i<n;i++) t += "0";
for (int i = 1; i < N; i++) {
String s = Integer.toBinaryString(i);
System.out.println(t.substring(s.length())+s);
}
}
我会把它写成
private static void binary(int n){
for(long i = 0, max = 1 << n; i < max; i++) {
String s = Long.toBinaryString(i);
while (s.length() < n) s = '0' + s;
System.out.println(s);
}
}
或更有效地
private static void binary(int n) {
char[] chars = new char[n];
for (long i = 0, max = 1 << n; i < max; i++) {
for (int j = 0; j < n; j++)
chars[j] = (char) (((i >>> (n - j - 1)) & 1) + '0');
System.out.println(chars);
}
}
binary(3);
印刷
000
001
010
011
100
101
110
111
快速/脏版:
System.out.println(Integer.toBinaryString(i+(1<<n)).substring(1));
(如果 n == 整数中的位数,或者如果您的整数中的位数比您想要打印的多...那么有限,但如果您知道输入可能会更简单一些)
尝试:
String.format("%" + n + "s", Integer.toBinaryString(i)).replace(' ', '0')
它可能不是最有效的解决方案,但它足够简单和简短。
private static void binary(int n){
for(int i = 1; i < Math.pow(2, n); i++)
System.out.println(String.format("%04d", Integer.parseInt(Integer.toBinaryString(i))));
}
}