Как считать в двоичном коде после указания заданного количества цифр? - PullRequest
0 голосов
/ 01 мая 2019

В качестве одной из промежуточных проблем соревнования нам было поручено перечислить все двоичные последовательности с цифрами «n» до максимального значения. Например, если ввод был

3

(3 цифры), тогда результат будет

000
001
010
011
100
101
110
111

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как подойти к этой проблеме. Ранее я мог создать метод, использующий рекурсию для проверки каждой предыдущей цифры, но я не мог сделать метод расширяемым.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019
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 голос
/ 01 мая 2019

Я создал простое решение, которое напечатает ваш ожидаемый результат.

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