检查JS中一个数字是否可被另一个数字整除

3

我是一个新手,正在解决一系列问题,但在这个问题上迷失了方向。

我需要验证一个数字是否可以被另一个数字整除,答案必须是真或假。

我得到了这个:

function solucao(numero, x) {
    
    solucao(numero % x); 
    
    if (solucao === 0)  {
        resultado = true;
        
    }else{
        resultado = false;
    }
            
}

但是我遇到了运行时错误,无法确定缺少了什么。

什么是错误?请分享错误信息。 - Or Assayag
我可以问一下错误是什么吗? - itachi
你正在函数内部调用它本身 - 这被称为递归。我不明白为什么你需要这样做。使用 % 运算符,就像你所做的那样,可以告诉你这个数字是否可以被另一个数字整除。然后让你的函数返回一个结果 - 返回... - A Haworth
你所需要在函数内做的就是 return !(numero % x);。这很简单,不需要其他任何操作。这个方法之所以有效是因为 0 是“假值”,而其他数字都是“真值”。 - Randy Casburn
7个回答

2

所以你想检查一个数字numero是否可以被x整除。取模运算符可以帮助你。试试这个:

function solucao(numero, x){
    if (numero % x == 0){
        return true
    }
    else {
        return false
    }
}


1
function solucao(numero, x) {
    
    let resultado;
    
    if (numero % x === 0)  {
        resultado = true;
        
    }else{
        resultado = false;
    }
            return resultado;
}

我认为你在某个地方感到困惑了。你正在调用函数本身内部的函数。你应该像这样做,并且还要声明结果变量。


1
我相信这会有帮助:

    function checkIfDivided(){
// in this section the variables come from an html document
            var number=parseInt(document.getElementById("number").value);
             var divisor=parseInt(document.getElementById("divisor").value);
            if(number%divisor==0)
              return true;
            else return false;
    }


or



    function checkIfDivided(number,divisor){
//in the function the variable are given as parameters
            if(number%divisor==0)
              return true;
            else return false;

    }


哦,抱歉我的错误,我用HTML编写了一个答案,所以我使用了document.getElementById。但事实证明他不需要HTML。 - Charbelalam

0

还有一种更干净的方法可以这样做。

console.log(Number.isInteger(10/2)) //true
console.log(Number.isInteger(4/2)) // false

//a must be greater than b
function check(a,b) {
 console.log(Number.isInteger(a/b))
 return Number.isInteger(a/b)
}

check(10,5)//true
check(8,3)//false

0

在我看来,似乎有两个问题:

  1. 您没有声明您的“resultado”变量(这可以简单地输入“let resultado;”而不使用单引号)

  2. 您没有在if / else语句之后返回您的“resultado”变量

现在,您的函数正在使用未声明的变量并且没有返回任何内容,因此您会收到错误。解决上述两个步骤,您就可以了! :)


1
你没有处理递归。 - Randy Casburn

0

你清楚地了解到模数运算符是正确的方法。使用它,我们发现 12 可以被 3 整除,因为 12 % 3 返回零。零被认为是“假值”,而任何其他数字都被认为是“真值”。

鉴于此,如果 12 % 3 返回一个“假值”(零),我们就不能直接使用结果。但是,如果我们可以将假值“翻转”为真值呢?我们可以使用 not 运算符(!)来实现。

在数学问题的结果上使用 ! 运算符需要在数学问题本身周围使用括号。

所以代码中的问题变成了 (12 % 3),并且要使用 ! 运算符来“翻转”它,它变成了

!(12 % 3)

下面通过以下方式证明:

  1. console.log(!(12 % 3)) --> 记录 true
  2. console.log(!(12 % 5)) --> 记录 false

该函数的实现非常简单且经过验证:

  1. console.log(isDivisible(12,3)); --> 输出 true
  2. console.log(isDivisible(12,5)); --> 输出 false

console.log(!(12 % 3))
console.log(!(12 % 5))

function isDivisible(number, x){
 return !(number % x);
}
 
console.log(isDivisible(12,3));
console.log(isDivisible(12,5));


0
错误是因为递归来自于代码行solucao(numero % x);。由于您已经使用了变量名"solucao",您可以尝试将模运算结果赋值给另一个变量,例如:const solution = numero % x。接下来,我们应该声明一个名为"resultado"的变量,它可能如下所示:
let resultado;
// continue with your code
if (solution === 0) {
    resultado = true;
} else {
    resultado = false;
}

之后,您还需要返回resultado的值,例如像这样:return resultado; 您的完整代码可能如下所示:
function solucao(numero, x) {
    const solution = numero % x; 
    let resultado;
    if (solution === 0)  {
        resultado = true;
    } else {
        resultado = false;
    }

    return resultado;
}

由于取模运算的结果如果一个数可以被整除就会返回0,你也可以返回一个更简短的版本,只需检查结果是否等于0:
function solucao(numero, x) {
    return numero % x === 0
}

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