找到没有模数的两个数的余数

时间:2017-07-03 02:12:07

标签: javascript

说明:编写一个名为“modulo”的函数。给定2个数字,“modulo”在将num1除以num2之后返回余数。

到目前为止,这是我的代码。当我在repl.it上运行它时,它会给出正确的余数,但是当我提交程序时,它会进入一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助将不胜感激,谢谢。基本上我不断添加number2,直到它达到1或高于它。如果它变高,我将数字2减去一次,然后找出差异。

function modulo(num1, num2) {
    if(num1 === 0) {
      return 0;
    }
    if(num2 === 0) {
      return NaN;
    }
    if(isNaN(num1) === true || isNaN(num2) === true) {
      return NaN;
    }

    var i = 0;

    for( i = 0; i <= num1;) {
      i += num2;
      if(i === num1) {
        return 0;
      }
      else if(i > num1) {
        i = i - num2;
        console.log(i, num1);
        return num1 - i;
      }
   }
}

var output = modulo(25, 4);
console.log(output);

3 个答案:

答案 0 :(得分:0)

我不完全确定无限循环出现在哪里;我已将您的代码插入控制台,我可以正常调用该函数。您使用哪个网站进行验证?

此外,在不改变运动量的情况下,我想指出几个小区域,您可以整合代码以提高可读性:

    if(num2 === 0) {
      return NaN;
    }

    if(isNaN(num1) === true || isNaN(num2) === true) {
      return NaN;
    }  

可以精炼成

    if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
      return NaN;
    }  

因为在JavaScript中,布尔值的工作方式使得具有实际价值的所有内容都被认为是真实的,即isNaN(num1)isNaN(num2)是&#34; true&#34;默认情况下。

另外,请记住,您可以使用所有赋值运算符;它完全是可选的,但由于您使用了一个(i += num2;),我想我可以指出您可以使用另一个代码(i -= num2;)。

快乐的编码! :)

答案 1 :(得分:0)

这可能是另一种选择:

function modulo(num1, num2) {

    if(isNaN(num1) || isNaN(num2) ) {
      return NaN;
    }

    var strResult = (num1/num2).toString();
    
    var decimalPart =
      parseFloat(strResult.substr(strResult.indexOf(".")));
     
    var remainder = Math.round(decimalPart*num2);
    return remainder;
}

console.log(modulo(77,9), (77%9)); // 5
console.log(modulo(549,123), (549%123)); // 57
console.log(modulo(33,6), (33%6)); // 3

答案 2 :(得分:0)

Dictionary

这非常简单,应该始终有效