我正在寻找一个从整数中删除所有9个的方法:
public int noNine(int i){
int res = 0;
return res;
}
示例:
noNine(0)->0
noNine(1991)->11
noNine(99)->0
noNine(19293949)->1234
等等。
不允许使用字符串,也没有外部方法。
你能帮助我吗?
谢谢!
Eddie Texas
答案 0 :(得分:6)
int removeNine(int n)
{
int result = 0;
int mul = 1;
while(n > 0)
{
//check if current digit is 9. if 9 then do nothing
if(n % 10 == 9)
{
n = n / 10;
continue;
}
else
{
//if not 9 then add this to result after multiplying by current mul
result += mul * (n % 10);
//update mul so that the next digit is added according to power of 10
mul = mul * 10;
}
n = n / 10;
}
return result;
}
答案 1 :(得分:3)
您可以通过多种方式解决此问题
我将详细介绍第二种技术:
使用此技术,您可以使用整数或字符串来解决问题。我会按照你所说的那样使用汉堡:
返回最终值
public int noNine(int i){
if(i < 10){
if(i == 9)
return 0;
else
return i;
}
int lastDigit = i % 10;
if(lastDigit == 9)
return noNine(i / 10);
else
return noNine(i / 10)*10+lastDigit;
}
这里的关键点是:n % 10 = last digit of n
和n / 10 = all previous digits of n
。这是因为Java中的整数除法!
答案 2 :(得分:0)
这里的版本以不同于ritratt的方式编写,以防你不理解他的版本:
public int noNines(int num) {
int multiplier = 0;
int result = 0;
while (num > 0) {
int digit = num % 10;
System.out.println("digit=" + digit);
if (digit == 9) {
//ignore
} else {
System.out.println("Adding " + (digit * (int)Math.pow(10, multiplier)));
result += digit * (int)Math.pow(10, multiplier);
multiplier++;
}
num = num / 10;
}
return result;
}
我离开了控制台输出,因此您可以看到该方法的实际效果。
答案 3 :(得分:0)
你可以这样做:
public int removeNines(int n) {
int returnValue = 0, multiplier = 1;
while (n > 0) {
if (n%10 != 9) {
returnValue += (n%10) * multiplier;
multiplier *= 10;
}
n /= 10;
}
return returnValue;
}
这会遍历所有数字,如果它不是9,则将其添加到输出中。经过测试here并正常工作