我有一个测试,我需要编码以便在不使用乘法的情况下将两个数相乘,
代码如下,
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;
}
答案 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
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;
答案 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;
}