如何检查一个整数是否包含某个数字?
例如:
var n = 12;
var m = 34;
n contains 1 // true
m contains 1 // false
不将整数转换为字符串,最快的(性能最佳)方法是什么?
如何检查一个整数是否包含某个数字?
例如:
var n = 12;
var m = 34;
n contains 1 // true
m contains 1 // false
请参考以下代码(如果注释不够清晰,请随时提问):
Original Answer翻译成"最初的回答"
function contains(number, digit) {
if (number < 0) { // make sure negatives are dealt with properly, alternatively replace this if statement with number = Math.abs(number)
number *= -1;
}
if (number == digit) { // this is to deal with the number=0, digit=0 edge case
return true;
}
while (number != 0) { // stop once all digits are cut off
if (number % 10 == digit) { // check if the last digit matches
return true;
}
number = Math.floor(number / 10); // cut off the last digit
}
return false;
}
Math.abs(number)
可以获得一个正数值,无需测试它是否小于零然后乘以 -1。 - someconst contains = (q, p) =>
p < 10
? p === q
: p % 10 === q || contains(q, p / 10 >>> 0)
console.log(contains(1, 12)) // true
console.log(contains(1, 34)) // false
console.log(contains(9, 14293)) // true
console.log(contains(9, 1212560283)) // false
if (n.toString().includes("1")) {
/// Do something
}
.toString()
在此处所做的。 - Bruno Monteiron
仍然是一个数字。 - Jaromanda X试试这个:
let n = 1234;
let flag = false;
while (n > 0){
r = n % 10;
if(r == 1){
flag = true;
break;
}
n = (n - (n % 10)) / 10;
}
console.log("n contains 1 = "+flag);
n >= 0
会使它成为一个无限循环。 - zerkms
Math.floor(1234 / 1000) -> 1; Math.floor(234 / 100) -> 2; ...
等等。 - zerkms