在JavaScript中将两个数字相乘,只有加法和减法(无日志)

时间:2015-10-01 21:14:25

标签: javascript algorithm math

我正在尝试将两个数字相加,仅使用加法/减法(对于算法练习,因为我是JavaScript的新手)。我得到它与日志一起工作,但我想尝试只有加/减。有没有办法在没有子程序的情况下执行此操作 - 我在底部的addY函数?如果没有for循环也知道如何做到这一点也很棒!

copy

4 个答案:

答案 0 :(得分:1)

如果你想成倍增加,你可以做一个循环:

for(var i = 0; i<y; i++){
    x +=x;
}

答案 1 :(得分:1)

我使用while循环而不是for来完成此操作,但我认为您总是需要某种迭代。

var multiply = function(x, y) {
    if (y === 0) {
        return 0;
    }

    var minus = y < 0;

    if (minus) {
        y = -y;
    }

    var total = x;

    while (y > 1) {
        total += x;
        y--;
    }

    return minus ? -total : total;
}

答案 2 :(得分:1)

正如其他人所说,如果使用循环,乘法很容易。唯一需要注意的是,在使用循环添加变量之前,需要让变量变为正数,否则会引入无限循环的风险。

一种简单的方法是在遇到负数时使用递归来切换符号。

function multiply(a, b) {
    if (a < 0) {
      return -(multiply(-a, b))
    } else if (b < 0) {
      return -(multiply(a, -b))
    } else {
      var total = 0;
      // math to calculate product goes here
      return total;
    }
  }

虽然可能算作作弊,但-a在数学上等同于a * -1

编辑: Jiggszon建议您执行0-a代替-a以避免作弊。

无论如何,这是一个实现,所以你可以看到它的实际效果:

&#13;
&#13;
(function() {
  var x = document.getElementById("x");
  var y = document.getElementById("y");
  var z = document.getElementById("output");
  document.getElementById("btnCalc").addEventListener("click", function() {
    z.innerHTML = multiply(+x.value, +y.value);
  });


  function multiply(a, b) {
    if (a < 0) {
      return 0-(multiply(0-a, b))
    } else if (b < 0) {
      return 0-(multiply(a, 0-b))
    } else {
      var smallerNumber;
      var biggerNumber;
      if (a <= b) {
        smallerNumber = a;
        biggerNumber = b;
      } else {
        smallerNumber = b;
        biggerNumber = a;
      }
      var total = 0;
      for (var i = 0; i < smallerNumber; i++) {
        total += biggerNumber;
      }
      return total;
    }
  }
})();
&#13;
<input type="button" id="btnCalc" value="Calculate" />
<input type="text" value=100 id="x" />x
<input type="text" value=3 id="y" />=
<span id="output"></span>
&#13;
&#13;
&#13;

在上面的代码中唯一值得指出的另一件事是它在执行循环之前检查其中一个变量是否小于另一个变量。这样它可以尽可能少地迭代!

答案 3 :(得分:1)

&#13;
&#13;
function multiply(x, y) {
    var product = 0, sign = x > 0 ? 1 : -1, y = x > 0 ? y : 0 - y;
    if (x && y) do product += y; while (x -= sign);
    return product;
}

alert(multiply( 5,  7));
alert(multiply(-5,  7));
alert(multiply( 5, -7));
alert(multiply(-5, -7));
alert(multiply( 0,  7));
alert(multiply( 5,  0));
&#13;
&#13;
&#13;