从数字中删除数字而不反转数字
Remove digits from number without reversing the number
我得到一个练习,我需要创建一个函数来获取两个参数,数字 (long) 和数字 (int),我必须从数字中删除数字,然后 return 它。
我做题的时候把数字倒过来,最后再倒过来得到原来的数字。
我想知道有没有什么方法可以不把数字倒过来做两次
long myFunction(long number, int digit){
int tmp = 0;
if (digit <= 9 && digit >= 0){
while (number != 0){
if (number % 10 != digit){
tmp = (tmp + (number % 10)) * 10;
}
number = number / 10;
}
tmp = tmp / 10;
int rev = 0, remainder;
while (tmp != 0) { // Reverse an Integer
remainder = tmp % 10;
rev = rev * 10 + remainder;
tmp /= 10;
}
return rev;
}
return number;
}
另一种方法可能是跟踪要添加到结果中的数字的位置(通过将其乘以 10position)。这样,您就不必在完成后反转数字:
long removeDigit(long number, int digit) {
long result = 0L;
long multiplier = 1L;
while (number > 0L) {
int currDigit = (int) number % 10;
if (currDigit != digit) {
result += multiplier * currDigit;
multiplier *= 10;
}
number /= 10;
}
return result;
}
我得到一个练习,我需要创建一个函数来获取两个参数,数字 (long) 和数字 (int),我必须从数字中删除数字,然后 return 它。
我做题的时候把数字倒过来,最后再倒过来得到原来的数字。
我想知道有没有什么方法可以不把数字倒过来做两次
long myFunction(long number, int digit){
int tmp = 0;
if (digit <= 9 && digit >= 0){
while (number != 0){
if (number % 10 != digit){
tmp = (tmp + (number % 10)) * 10;
}
number = number / 10;
}
tmp = tmp / 10;
int rev = 0, remainder;
while (tmp != 0) { // Reverse an Integer
remainder = tmp % 10;
rev = rev * 10 + remainder;
tmp /= 10;
}
return rev;
}
return number;
}
另一种方法可能是跟踪要添加到结果中的数字的位置(通过将其乘以 10position)。这样,您就不必在完成后反转数字:
long removeDigit(long number, int digit) {
long result = 0L;
long multiplier = 1L;
while (number > 0L) {
int currDigit = (int) number % 10;
if (currDigit != digit) {
result += multiplier * currDigit;
multiplier *= 10;
}
number /= 10;
}
return result;
}