簡體   English   中英

JavaScript函數將兩個數字相乘,直到彼此相等

[英]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,因為i0開始,因此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;
        }
    }
}

解決方案的問題是,雖然result1result2在不同的時間可能擁有相等的值,但是, 如果原始輸入onetwo相同,它們將只會同時共享相同的值。 因為您的返回條件依賴於這兩個值的等價關系,所以您最終得到一個僅在one==two時返回的函數。 輸入35循環示例如下:

  1. i = 0,結果1 = 0,結果2 = 0
  2. i = 1,結果1 = 3,結果2 = 5
  3. i = 2,結果1 = 6,結果2 = 10

...無窮, result2 result1永遠不等於result2

更好的解決方案是取值a (其中a是具有最低絕對值的參數),然后將其重復添加到其自身,直到總和retab完全除。 我們可以利用模運算符來檢查這種情況。 這種方法還使我們能夠在必要時計算“負最低公倍數”:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM