Используя рекурсию, мне нужно ввести число, и консоль напечатает это число без его старшей цифры. Если он меньше 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.
Вход будет числом или числами? потому что, используя рекурсию, вы можете принимать несколько входных данных.
Только один номер. Например 6342
Вот мое решение:
// 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 в начале.
If it's smaller than 10
означаетn<10