将两个数相乘而不使用乘法

时间:2016-07-27 09:00:01

标签: javascript data-structures logic

我有一个测试,我需要编码以便在不使用乘法的情况下将两个数相乘,

代码如下,

function multiply(num,toNum){
  var product = 0;
  for(var i = 1; i <= toNum; i++){
    product += num;
  }

  return product;
}

console.log(multiply(2,5)); 

输出

rahul@rahul:~/myPractise/Algo$ node MultiplyWithoutLoop.js 
10 
rahul@rahul:~/myPractise/Algo$ 

上述代码是否令人满意或需要是否有改进的余地。

可以应用更好的逻辑。

嗨,

我使用递归来解决它,

这是代码,

function multiply01(num,toNum){
  var product = num;    
  return (toNum >= 1) ? product + multiply01(product,--toNum) : 0; 
}

3 个答案:

答案 0 :(得分:9)

紧凑的方式:

function multiply(a, b) {
  return a / (1 / b);
}

console.log(multiply(2, 5)); // 10

答案 1 :(得分:4)

你可以使用加号来表示奇数和位移。更好地称为Ancient Egyptian multiplication

如果b为奇数,则a的值相加。然后将a除以2并分配整数部分。 b加倍。

示例:

 a    b   sum
---  ---  ---
  5    4    4  add 4
  2    8    4
  1   16   20  add 16
  0   32   20  <- result

&#13;
&#13;
function multiply(a, b) {
    var sum = 0;
    while (a) {
        if (a & 1) {
            sum += b;
        }
        a >>= 1;
        b <<= 1;
    }
    return sum;
}

console.log(multiply(5, 4));
console.log(multiply(3, 7));
console.log(multiply(191, 7));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

请尝试此操作,它还会处理负值

function multiply(x, y)
{
    /* Add x one by one */
    if(y > 0 )
    {
        return (x + multiply(x, y-1));
    }

    /* the case where y is negative */
    else if(y < 0 )
    {
        return -multiply(x, -y);
    }

    return 0;
}