检查整数是否包含数字JavaScript

4

如何检查一个整数是否包含某个数字?

例如:

var n = 12;
var m = 34;

n contains 1 // true
m contains 1 // false

不将整数转换为字符串,最快的(性能最佳)方法是什么?

这不是那个问题的副本,而是另一种语言。 - UncleDave
那是Java,不是javascript。 - user8887068
1
你可以通过迭代地除以10的幂来找到每个数字。例如:Math.floor(1234 / 1000) -> 1; Math.floor(234 / 100) -> 2; ...等等。 - zerkms
1
你不能把它转换成字符串有没有特别的原因?否则,你需要找到数学运算(就像前面评论中建议的那样),但这可能不是最快的方法(根据要求)。 - Bruno Monteiro
1
是的 - 我正在使用它解决Project Euler问题。 - user8887068
显示剩余2条评论
4个回答

2

请参考以下代码(如果注释不够清晰,请随时提问):

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;
}

2
使用 Math.abs(number) 可以获得一个正数值,无需测试它是否小于零然后乘以 -1。 - some
我会编辑那行的注释,以包括这个作为一个替代方案。 - Aplet123

0
这是一个简单的递归表单 -

const 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


-2
if (n.toString().includes("1")) {

     /// Do something

}

1
问题陈述中提到“不将整数转换为字符串”,这正是 .toString() 在此处所做的。 - Bruno Monteiro
从技术上讲,这是正确的,数字 n 仍然是一个数字。 - Jaromanda X

-2

试试这个:

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);

你试过这个吗?它说1234不包含1。;) - obscure
1
然后在 while 条件中尝试 n >= 0。 - Sivaramakrishnan
n >= 0 会使它成为一个无限循环。 - zerkms
现在它运行良好,JavaScript商是一个棘手的问题。我已经修复了它。 - Sivaramakrishnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接