繁体   English   中英

Javascript中不带模(%)运算符取余,占-/+号

[英]Getting a remainder without the modulo (%) operator in Javascript, accounting for -/+ sign

对于家庭作业,我需要在不使用内置模 (%) 运算符的情况下返回 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

如果你考虑计算模数的数学过程,你可能会看到如何做到这一点,而不必诉诸于一堆案例陈述。 相反,想一想,你只是计算余数:

给定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。 你说你不是在寻找直接的答案,所以我会说!

编辑:这是代码,就像我在评论中所说的那样,这正是我在上面发布的伪代码:

function modulo(a,b){
  q = parseInt(a / b);  //finding quotient (integer part only)
  p = q * b;  //finding product
  return a - p;  //finding modulus
}

这将返回与使用%完全相同的值

你可能会过度思考这一点。 你基本上在你的问题中说明了解决方案:

我需要携带num1上的任何一个符号,如果num2是负数,也需要返回一个正数

第二部分不准确,但我怀疑你只是错过了。 num2为负数时,应返回正数, 除非 num1为负数。

无论如何,重要的一点是,如果num1为负,则结果为负,否则结果为正。 num2的符号被丢弃。

启动你编写的代码(其他人将很快指出这不是最简单的解决方案),修复是使用两个数字的绝对值计算余数,然后将num1的原始符号应用于结果。

 function modulo(num1, num2) { var sign = num1 < 0 ? -1 : 1; var dividend = Math.abs(num1); var divisor = Math.abs(num2); if (dividend === 0) { return 0; } if (dividend === 0 || isNaN(dividend) || isNaN(divisor)) { return NaN; } if (dividend < divisor) { return sign * dividend; } var counter = dividend; while (counter >= divisor) { counter = counter - divisor; } return sign * counter; } console.log( 25 % 4, modulo( 25, 4)); console.log(-25 % 4, modulo(-25, 4)); console.log( 25 % -4, modulo( 25, -4)); console.log(-25 % -4, modulo(-25, -4)); 
 .as-console-wrapper{min-height:100%;} 

这是基本公式: dividend = divisor * quotient + remainder从这个等式可以计算出余数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM