簡體   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