Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 求两个数的无模余数_Javascript - Fatal编程技术网

Javascript 求两个数的无模余数

Javascript 求两个数的无模余数,javascript,Javascript,说明:编写一个名为“模”的函数。给定2个数字,“模”返回num1除以num2后的余数 这是到目前为止我的代码。当我在repl.it上运行它时,它给出了正确的余数,但是当我提交程序时,它进入了一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助都将不胜感激,谢谢。基本上,我一直在增加数字2,直到它要么达到数字1,要么超过它。如果它更高,我减去数字2一次,然后找出差值 function modulo(num1, num2) { if(num1 === 0) {

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

这是到目前为止我的代码。当我在repl.it上运行它时,它给出了正确的余数,但是当我提交程序时,它进入了一个无限循环,我不知道为什么。我认为for循环中的返回函数会自动退出它。任何帮助都将不胜感激,谢谢。基本上,我一直在增加数字2,直到它要么达到数字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);
函数模(num1,num2){ 如果(num1==0){ 返回0; } 如果(num2==0){ 返回NaN; } 如果(isNaN(num1)==true | | isNaN(num2)==true){ 返回NaN; } var i=0; 对于(i=0;i num1){ i=i-num2; 控制台日志(i,num1); 返回num1-i; } } } var输出=模(25,4); 控制台日志(输出);
我不完全确定无限循环出现在哪里;我已经将您的代码插入控制台,可以很好地调用该函数。您使用哪个站点进行验证

另外,在不改变太多练习的情况下,我想指出几个可以整合代码以提高可读性的小领域:

    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)
都是“真的”

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


快乐编码!:)

这可能是另一种选择:

函数模(num1,num2){ if(isNaN(num1)| isNaN(num2)){ 返回NaN; } var strResult=(num1/num2).toString(); 分母变数= parseFloat(strResult.substr(strResult.indexOf(“.”)); var余数=数学四舍五入(小数部分*num2); 返回剩余部分; } log(模(77,9),(77%9));//5. log(模(549123),(549%123));//57 log(模(33,6)、(33%6));//3
这非常简单,应该可以一直使用

你说的“提交程序”是什么意思?对不起,我在一个使用repl.it的javascript准备网站上。Submit使用许多测试来确保程序正常运行。所以它会测试负数,0和NaN,以确保模数是正确的。如果你不介意我问的话,它是什么网站?这很奇怪,因为我在控制台中调用的函数很好。另外,有关如何清理代码的一些快速提示,请参见下面的答案。:)看起来它对我有用(正数)——你的确切问题是什么?为什么你认为你有一个无限循环?一个完全不同的实现并不能解释为什么OP可能在自己的版本上有问题。检查后,模数只是
num-mod*Math.floor(num/mod)
。但我不认为这有助于行动。
function modulo(num1, num2) { var div = num1/num2;
var remainder = div - Math.floor(div); // gives the decimal point value left out from the division
return Math.round(remainder * num2); // multiplies the remainder with num2 and gives a whole number value
}