在Java中使用递归打印数字而没有最大位数

时间:2019-04-10 12:23:14

标签: java recursion

使用递归,我需要输入一个数字,控制台将打印该数字而不显示其最高数字。如果小于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。

3 个答案:

答案 0 :(得分:0)

这是我的解决方法:

// 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));

}

答案 1 :(得分:0)

由于您已经很好地找到了最大位数,因此可以在没有数字的情况下打印此数字。

seq<Collections.Generic.KeyValuePair<DateTime,float>>

答案 2 :(得分:0)

您可以将数字转换为字符串,或更准确地说,将其转换为字符数组。然后,您可以找出此数组中最大的位数,将其删除并将char数组转换回整数。

这大概是这样的:

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的检查。