Java - преобразование десятичного числа в двоичное - целое число - рекурсивная функция

Эй, я действительно пытаюсь преобразовать десятичное целое в двоичное целое, но безуспешно.

Помогите пожалуйста мне.

И я не хочу делать это «System.out.println()», потому что я уже это сделал.

СПАСИБО!

`Мне нужна рекурсивная функция, которая получает десятичное целое и возвращает двоичное целое

public static void decToBin(int number) {
    if(number == 0)
        return ;
    decToBin(number / 2);
    System.out.print(number % 2);
}

Это то, что я сделал ...

Когда я пытаюсь получить строку:

public static String decToBin(int number) {
    if(number == 0)
        return "";
    return new Integer(number % 2).toString() + new Integer(decToBin(number / 2)).toString();
}

Ошибка...


person user3648450    schedule 25.05.2014    source источник
comment
Пожалуйста, покажите нам, что вы пытались.   -  person PakkuDon    schedule 25.05.2014
comment
А в чем проблема с вашим кодом? Вы получаете некоторые ошибки / неправильные результаты? Или вы просто просите нас переписать его во что-то другое, в котором не используется System.out.println?   -  person Pshemo    schedule 25.05.2014
comment
Да, я хочу, чтобы это была строка или целое... Посмотрите, пожалуйста, еще раз мое редактирование.   -  person user3648450    schedule 25.05.2014
comment
Зачем нужна рекурсия?   -  person rpax    schedule 25.05.2014
comment
Вы должны использовать String в качестве результата? StringBuilder будет легче работать.   -  person Pshemo    schedule 25.05.2014


Ответы (4)


public static String decToBin(int number) {
    if(number == 0)
        return "";
    return new Integer(number % 2).toString() + new Integer(decToBin(number / 2)).toString();
}

Этот подход имеет несколько недостатков.

  • Во-первых, вы не можете использовать "" в качестве аргумента new Integer(""), потому что "" не содержит значения, поэтому вы увидите NumberFormatException.

  • Другой проблемой является порядок генерации результата. number % 2 должен быть помещен после результата decToBin(number / 2), точно так же, как вы делаете это в своем первом примере, где вы печатаете его после рекурсивного вызова decToBin

    decToBin(number / 2);
    System.out.print(number % 2);
    
  • Наконец, в своем операторе возврата вы создаете новую строку, поэтому для генерации "100101" вы будете генерировать "" "1" "01" "101" 0101" "00101", а затем, наконец, «100101"». Чтобы избежать этого, используйте StringBuilder и его метод append.

person Pshemo    schedule 25.05.2014
comment
Это преобразует двоичное целое число, а не десятичное число. - person user207421; 17.06.2017
comment
@EJP Привет. Не могли бы вы пояснить свой комментарий? Я не говорю, что вы не правы, но я не уверен, что вы имеете в виду. Из того, что я вижу, вопрос касается создания двоичного представления integer в десятичной системе (я не уверен, хочет ли OP вернуть здесь String или int, поэтому не сосредоточился на этом). Кроме того, этот ответ не предназначался для предоставления рабочего решения (поскольку это явно домашний вопрос о рекурсии), а для того, чтобы указать на несколько ошибок, которые ОП допустил в своем коде. - person Pshemo; 17.06.2017

Это немного устарело, но для справки и правильного ответа вам нужно сделать следующее:

public static String dec2Bin(int num) {

    String result = ((num % 2 == 0) ? "0" : "1");

    if (num == 0 || num == 1) {
        return result;
    }

    return dec2Bin(num/2) + result;
}
person Hatem Jaber    schedule 04.11.2016
comment
Это преобразует двоичное целое число, а не десятичное число. - person user207421; 17.06.2017

person    schedule
comment
Это преобразует двоичное целое число, а не десятичное число. - person user207421; 17.06.2017

person    schedule
comment
Пример кода хорош, но не поясняет, что он делает. Должен объяснить ответ (действительно, Integer.toBinaryString(n) это то, чего хочет автор, я думаю). - person Ironcache; 03.08.2016