簡體   English   中英

用javascript划分

[英]Division in javascript

function subtraction(num1, num2){       
    var num3; 
    num3 = num1 - num2;
    document.writeln("Difference "+ num3);
    return (num3);
}    

function division(num1, num2){
    difference = parseFloat(subtraction());
    var x;
    while(difference > 0){
        difference = num1-num2;
        x = x + 1;
    }
    document.writeln("Quotient" + x);
}

嗨! 我想做一個除法函數,但要注意的是我不會使用“ /”。 這就是我得到的,到目前為止,它打印出“未定義”,如果我說x = 0,它將打印出“ 0”。

我修復了您的代碼中的一些問題:

function division(num1, num2){
        var difference = num1-num2; // difference is now a local variable

        var x = 0;  // x should be initialized
        while(difference > 0){
            difference = difference-num2; // difference should change, not always be num1-num2
            x = x + 1;
        }
        console.log("Quotient" + x);
        console.log("Remainder" + (difference+num2));
   }

http://jsbin.com/UQIqejo/1/edit

您仍然會遇到算法本身的問題,因為num2小於或等於0會導致無限循環,但是我希望發現這些問題很有趣。

編輯:相同代碼的較小版本:

 function divisionSmall(a,b) {
      var x = 0;
      while ((a-=b) > 0) x++;
      console.log('Quotient', x);
      console.log('Remainder', a+b);
    }

EDIT2:正確的划分:

function divisionSmall(a,b) {
  var x = 0;
  while ((a-=b) > 0) x++;  
  return [x, a+b];
}

function divisionCorrect(a,b) {
  var ans;
  if (b === 0) return ['INF', 0];  


  if ((a > 0) && (b > 0)) {
    return divisionSmall(a,b);
  }

  if ((a > 0) && (b < 0)) {
    ans = divisionSmall(a,-b);
    return [-ans[0], ans[1]];
  }

  if ((a < 0) && (b > 0)) {
    ans = divisionSmall(-a,b);
    return [-ans[0] - 1, b-ans[1]];
  }


  if ((a < 0) && (b < 0)) {
    ans = divisionSmall(-a,-b);
    return [ans[0] + 1, -b-ans[1]];
  }
}

console.log(divisionCorrect(11,3));   //  3, 2
console.log(divisionCorrect(11,-3));  // -3, 2
console.log(divisionCorrect(-11,3));  // -4, 1
console.log(divisionCorrect(-11,-3)); //  4, 1

在沒有if s :)的情況下執行邏輯仍然存在挑戰。 祝好運。

如果您在做數字,那么使用遞歸是一種更簡單的方法:

function divide(num,denom) {
  if (num < denom) return 0;
  return (1 + divide(num - denom, denom));
}

對於負數,您將必須擴展此值以跟蹤數字是否小於0。而且,簡潔明了的情況下,對於大分子和小分母,這會分解,因為將超出最大調用堆棧大小。

我相信您的問題出在您的while循環上。 如果subtraction返回負數,則不會計算。

用戶Math.abs可獲得絕對值。

   <script>
   function division(num1, num2){
        var difference = Math.abs(parseFloat(subtraction(num1, num2)));
        var x = 0;
        while(difference > 0){
            difference = difference-num2;
            x = x + 1;
        }
        document.writeln("Quotient" + x);
   }
   function subtraction(num1, num2){ 
      var num3; 
      num3 = num1 - num2; 
      document.writeln("Difference "+ num3); return (num3); 
   }
   </script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM