我有一个打印出数字二进制格式的方法:
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
答案 0 :(得分:3)
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);
}
}
答案 1 :(得分:2)
我会把它写成
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
答案 2 :(得分:2)
快速/脏版:
System.out.println(Integer.toBinaryString(i+(1<<n)).substring(1));
(如果n ==整数中的位数,或者如果整数中的位数多于想要打印的位数,那么明显的缺陷...如此有限,但如果您知道输入则可能更简单一些<) / p>
答案 3 :(得分:2)
尝试:
String.format("%" + n + "s", Integer.toBinaryString(i)).replace(' ', '0')
它可能不是最有效的解决方案,但它简单而且足够短。
答案 4 :(得分: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))));
}
}