在javascript中划分

时间:2013-10-09 15:18:00

标签: 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”。

3 个答案:

答案 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 :)的情况下执行逻辑仍然存在挑战。祝你好运。

答案 1 :(得分:0)

如果您使用递归操作数字是一种更简单的方法:

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

对于负数,你必须扩展它以跟踪数字是否小于0.此外,虽然简洁而整洁,但由于最大调用堆栈大小将超过大分子和小分母,这会分解。

答案 2 :(得分: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>