2016-07-27 6 views
0

Ich habe einen Test, wo ich ohne Verwendung Multiplikation zum Multiplizieren zweier Zahlen Code benötigt,Multipliziere zwei Zahlen ohne Multiplikation unter Verwendung

der Code ist wie folgt,

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

    return product; 
} 

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

Der Ausgang ist

[email protected]:~/myPractise/Algo$ node MultiplyWithoutLoop.js 
10 
[email protected]:~/myPractise/Algo$ 

Ist der oben genannte Code zufriedenstellend oder erforderlich, gibt es Raum für Verbesserungen.

Kann eine bessere Logik angewendet werden. Hey

,

Ich löste es Rekursion,

dies der Code ist,

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

wenn dies richtig funktioniert, sind Sie wahrscheinlich besser dieses Posting auf http://codereview.stackexchange.com/ aber eine Möglichkeit, es besser zu machen ist, die niedrigere Zahl für die Schleife zu verwenden – Pete

+1

Ich stimme, diese Frage als off-topic zu schließen, weil es um Code Review geht - können wir es stattdessen dorthin verschieben? – Neal

Antwort

3

Sie könnten Addition für ungerade Zahlen und Bitverschiebung verwenden. Besser bekannt als Ancient Egyptian multiplication.

Der Wert b wird addiert, wenn a ungerade ist. Dann wird a durch 2 geteilt und der ganzzahlige Teil zugewiesen. b ist verdoppelt.

Beispiel:

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));

7

Compact Art und Weise:

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

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

Haha lol, das scheint zu sein: D – nicael

+1

Falsche Ergebnisse auf 'b = 0' – Maxx

+1

Braucht einen Sonderfall zu handhaben' b' ist 0, aber ansonsten ist dies der Gewinner. Ich würde mit einem Ternär dafür gehen. – Pimgd

0

Bitte versuchen Sie dies, wird es auch handhaben negativer Wert

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; 
}