[英]JavaScript function to multiply two numbers until they equal each other
我正在嘗試構建此函數以由用戶傳遞兩個數字,並查找兩個數字的最低公倍數。 我試圖通過使用此邏輯來構建函數。 繼續相乘直到兩個數字的結果彼此相等。 我需要一些邏輯上的幫助。 謝謝。
function performCalc(one, two) {
var num1 = new Number;
var num2 = new Number;
var i = new Number(0);
var num1 = one;
var num2 = two;
var result1 = new Number;
var result2 = new Number;
do {
result1 = num1 * i;
result2 = num2 * i;
i++
}
while (result1 != result2);
if (result1 == result2) {
return result1;
}
}
這將始終返回0,因為i
從0
開始,因此result1
將為0, result2
將為0。
要查找LCM,您需要測試不同的乘積集(例如,對於LCM(12, 18)
,您需要將18
乘以2
,將12
乘以3
)。
一種方法是:
var i,j;
for(i=1;i <= two; ++i) {
for(j=1; j<=one; ++j) {
if(one * i == two * j) {
return one * i;
}
}
}
解決方案的問題是,雖然result1
和result2
在不同的時間可能擁有相等的值,但是, 如果原始輸入one
和two
相同,它們將只會同時共享相同的值。 因為您的返回條件依賴於這兩個值的等價關系,所以您最終得到一個僅在one==two
時返回的函數。 輸入3
和5
循環示例如下:
...無窮, result2
result1
永遠不等於result2
。
更好的解決方案是取值a
(其中a
是具有最低絕對值的參數),然后將其重復添加到其自身,直到總和ret
被a
和b
完全除。 我們可以利用模運算符來檢查這種情況。 這種方法還使我們能夠在必要時計算“負最低公倍數”:
function lowest_common_multiple(a,b) {
var max = Math.max(a,b),
min = Math.min(a,b);
if(Math.abs(max + min) <= Math.abs(max)) {
return 0;
}
var abs_min = (Math.abs(a) < Math.abs(b)) ? a : b;
var ret = abs_min;
while(1) {
ret += abs_min;
if(!(ret % a || ret % b)) {
return ret;
}
}
}
console.log(lowest_common_multiple(11,27)); // >> +297
console.log(lowest_common_multiple(-11,-27)); // >> -297
請注意,如果用戶為一個(或兩個)參數傳遞零,或者一個參數為正,而另一個參數為負,則此實現返回零。
也許這可以解決問題:
do {
result1 = num1 * i;
result2 = num2 * i;
if( result1 == result2 ){ break; }
i++
}
return result1;
看起來,您的代碼處於無限循環中,甚至可能將迭代限制為
i++;
if( i > 1000 ){ result1=0; break; } //if it tried 1000 times and found nothing, abort and return zero...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.