挑战是在数字末尾删除任何零。两个数字内的零值是可以的。 EG:
14000 == 14 //删除所有结束零 10300 == 103 //删除所有结束零
我写了这个函数来解决问题:
public class NoBoring {
public static int noBoringZeros(int n) {
System.out.println(n); // testing
System.out.println(Math.abs(n % 10)); //testing
if(Math.abs(n % 10) != 0){
return n;
}
return noBoringZeros(n/10);
}
}
不幸的是,这对负输入无效。请参阅下面测试用例的输出:
//LD = last digit of the number
//ZR is the zero removed
Fixed Tests: noBoringZeros
1450
0 //LD
145 //ZR
5 //LD
960000
0 //LD
96000 //ZR
0 //LD
9600 //ZR
0 //LD
960 //ZR
0 //LD
96 //ZR
6 //LD
1050
0 //LD
105 //ZR
5 //LD
-1050
0 //LD
-105 //ZR
5 //LD
-105
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
我完全不明白为什么会失败?我本以为n%10的退出声明不是= 0会导致n的返回,但对于负数而言似乎不是吗?
答案 0 :(得分:1)
如果您对数学函数不满意,可以使用String fucntions:
int n = -22400 ; // You want -224
String str = String.valueOf(n);
while(str.endsWith("0")){
if (str != null && str.length() > 0 && str.charAt(str.length()-1)=='0') {
str = str.substring(0, str.length()-1);
}
}
System.out.println(Integer.parseInt(str));
答案 1 :(得分:1)
您的代码存在负数和零输入问题。一种解决方案是单独处理它们。这是伪代码,只是为了确保你自己完成一些工作:
function void noBoringZeros(int n)
if (n < 0) then
// Deal with negative n.
print "-" + nbz(-n)
else if (n = 0) then
// Deal with zero n.
print 0 // or "All zeros" or whatever.
else
// Deal with positive n.
print nbz(n)
end if
end function
这里nbz()是一个简单的函数,可以从正数中删除尾随零:
function int nbz(int n)
// n >= 1 assumed.
int temp <- n
while (temp MOD 10 = 0)
temp <- temp DIV 10
end while
return temp
end function
答案 2 :(得分:0)
public class NoBoring {
public static int noBoringZeros(int n) {
System.out.println(n);
System.out.println(Math.abs(n % 10));
if(Math.abs(n % 10) != 0 || n == 0){
return n;
}
return noBoringZeros(n/10);
}
}
没有检查n == 0;