2017-06-23 34 views
0

我目前正在做一個函數,它將數字相乘而不帶任何算術運算符esp asterisk運算符。無負號乘以不帶星號

這裏是到目前爲止我的功能:

function product(num1, num2) { 
    var prod = 0; 

    for(var i=1; i<=num2; i++){ 
    prod += num1; 
    } 
    return prod; 
} 

var output = product(4, 7); 
console.log(output); // --> 28 

這實際工作除了負數。如何確保當我傳遞一個負數時它仍然可以正確地乘以它?我是這樣做的還是有更好的方法來做到這一點?

THnaks! 新手在這裏。

+0

如果NUM2 <0否定兩者NUM1與NUM2 –

+2

「沒有任何算術運算符乘號」 - 但你使用的是'+ ='運營商。這是一個算術運算符! –

+0

'i ++'也是一個算術運算符。在這種情況下,它與「i = i + 1」相同。您實際上允許哪些操作員用於此練習? –

回答

1

感謝@Jaromanda X的提醒,

我不應該使用*運算符。

當NUM2 < 0代碼出錯,

試試這個

function product(num1, num2) { 
    var prod = 0; 
    if(num2<=0){ 
    num2=-num2; 
    num1=-num1; 
    } 

    for(var i=1; i<=num2; i++){ 
    prod += num1; 
    } 
    return prod; 
} 
+0

的規則,但是您使用'*'...爲什麼不是'num1 = -num1 ; num2 = -num2;' –

+0

'num * = - 1'與'num = num * -1'相同 –

+0

我完全理解'* = -1'的確切含義!閱讀問題 - OP正試圖在不使用'*'操作符的情況下執行此操作:p –

0

你可以使用一些溫和的遞歸否定num2,結果如果num2爲負。這樣一來,你的函數的其餘部分可以保持不變:

function product(num1, num2) { 
 
    if (num2 < 0) { return -product(num1, -num2); } 
 

 
    var prod = 0; 
 

 
    for(var i=1; i<=num2; i++){ 
 
    prod += num1; 
 
    } 
 
    
 
    return prod; 
 
} 
 

 
console.log(product(4, 7)); 
 
console.log(product(-4, 7)); 
 
console.log(product(4, -7)); 
 
console.log(product(-4, -7));