指定位数后如何计算二进制数?

时间:2019-05-01 11:56:11

标签: java binary counting

作为中间竞争问题之一,我们的任务是列出所有带有“ n”个数字的二进制序列,直至达到最大值。例如,如果输入是

3

(3位数字),则输出为

000
001
010
011
100
101
110
111

我面临的问题是我不知道如何解决这个问题。以前,我可以使用递归创建一个方法来检查每个前一位数字,但无法使该方法可扩展。

2 个答案:

答案 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');
    }
}