Печать числа с использованием рекурсии в java без наибольшей цифры

Используя рекурсию, мне нужно ввести число, и консоль напечатает это число без его старшей цифры. Если он меньше 10, он вернет 0.

Я уже нашел самую большую цифру, но как я могу удалить ее и напечатать число без нее после этого? Это код самой большой цифры:

public static int remLastDigit(int n){

        if (n==0)                              
            return 0;
        return Math.max(n%10, remLastDigit(n/10)); 

    }

Если я ввожу 12345, я ожидаю, что на выходе будет 1234. Если я ввожу 9 или меньше, я ожидаю, что на выходе будет 0.

If it's smaller than 10 означает n<10
dehasi 10.04.2019 14:26

Вход будет числом или числами? потому что, используя рекурсию, вы можете принимать несколько входных данных.

Syed Mehtab Hassan 10.04.2019 14:27

Только один номер. Например 6342

user11340251 10.04.2019 14:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
304
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вот мое решение:

// call this method
public static int removeLastDigit(int number) {
    return removeLastDigitImpl(number, largestDigit(number));
}

private static int removeLastDigitImpl(int number, int largestDigit) {
    if (number < 10) { // if the number is a single digit, decide what to do with it
        if (number == largestDigit) {
            return 0; // if it is the largest digit, remove it
        } else {
            return number; // if it is not, keep it
        }
    }
    // handle the last digit of the number otherwise
    if (number % 10 == largestDigit) {
        // removing the digit
        return removeLastDigitImpl(number / 10, largestDigit);
    } else {
        // not removing the digit
        return removeLastDigitImpl(number / 10, largestDigit) * 10 + number % 10;
    }
}

// this is the same as your attempt
private static int largestDigit(int n){

    if (n==0)
        return 0;
    return Math.max(n%10, largestDigit(n/10));

}

Поскольку вы уже нашли максимальную цифру, вот как вы можете напечатать число без нее.

    public static void main(String[] args) {
        printWithoutDigit(2349345, remLastDigit(2349345));
    }

    public static void printWithoutDigit(int number, int maxDigit) {
        Integer.toString(number).chars().filter(digit -> Integer.valueOf(String.valueOf((char)digit))!=maxDigit).forEach(d -> System.out.print((char)d));
    }

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

Это будет выглядеть примерно так:

int num = 12345; //the number from which you want to remove the biggest digit
char[] numC = String.valueOf(num).toCharArray();
int biggestDigit = 0;
int biggestDigitIndex = 0;
for (int i = 0; i < numC.length; i++) {
    if (biggestDigit < Character.getNumericValue(numC[i])) {
        biggestDigit = Character.getNumericValue(numC[i]);
        biggestDigitIndex = i;
    }
    //Remove digit at index biggestDigitIndex from numC
    //Convert numC back to int
}

Конечно, вы должны включить это в свою рекурсию, что означает возврат числа, которое вы получили после преобразования numC обратно в int, а затем снова передать его во входной параметр. Также, конечно, вам нужно добавить проверку, если ваше число < 9 в начале.

Другие вопросы по теме