1
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”。

4

3 回答 3

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

在没有ifs 的情况下进行逻辑仍然存在挑战 :)。祝你好运。

于 2013-10-09T15:27:36.283 回答
0

如果您在做数字,他们是使用递归执行此操作的更简单方法:

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

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

于 2013-10-09T15:30:17.470 回答
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>
于 2013-10-09T15:32:41.867 回答