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