对于家庭作业,我需要返回 num1 除以 num2 后的余数,而不使用内置模 (%) 运算符。我可以使用以下代码让大多数测试通过,但我一直不知道如何解释给定数字的 -/+ 符号。我需要保留 num1 上的任何一个符号,并且如果 num2 为负数,还返回一个正数 - 如何做到这一点让我大吃一惊......:) 任何清晰的信息将不胜感激!我并不是在这里寻找直接的答案,更多的是我似乎错过了一些明显的东西......也许我需要一种新的方法?
function modulo(num1, num2) {
if (num1 === 0) {
return 0;
}
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
if (num1 < num2) {
return num1;
}
if (num1 > 0 && num2 > 0) {
var counter = num1;
while (counter >= Math.abs(num2)) {
counter = counter - num2;
}
return counter;
}
}
var output = modulo(25, 4);
console.log(output); // 1
如果您考虑一下计算模数的数学过程,您可能会明白如何做到这一点,而不必求助于一堆 case 语句。相反,你可以这样想,你只是计算余数:
给定 2 个数字 a 和 b,您可以计算mod(a,b)
通过执行以下操作:
q = a / b; //finding quotient (integer part only)
p = q * b; //finding product
remainder = a - p; //finding modulus
使用这个想法,你应该能够将其转移到JS中。你说你不是在寻找直接的答案,所以这就是我要说的!
Edit:这是代码,就像我在评论中所说的那样,它正是我上面发布的伪代码:
function modulo(a,b){
q = parseInt(a / b); //finding quotient (integer part only)
p = q * b; //finding product
return a - p; //finding modulus
}
这将返回与使用 % 完全相同的值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)