1

我有一种方法可以打印出二进制形式的数字:

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
4

5 回答 5

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);
       }
    } 
于 2013-01-10T13:23:48.157 回答
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
于 2013-01-10T13:23:35.727 回答
2

快速/脏版:

System.out.println(Integer.toBinaryString(i+(1<<n)).substring(1));

(如果 n == 整数中的位数,或者如果您的整数中的位数比您想要打印的多...那么有限,但如果您知道输入可能会更简单一些)

于 2013-01-10T13:26:19.967 回答
2

尝试:

String.format("%" + n + "s", Integer.toBinaryString(i)).replace(' ', '0')

它可能不是最有效的解决方案,但它足够简单和简短。

于 2013-01-10T13:27:10.480 回答
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))));
   }
} 

如何在左侧用零填充整数?

于 2013-01-10T13:53:25.127 回答