ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の楽しい質問: 最小公倍数

JavaScript の楽しい質問: 最小公倍数

黄舟
黄舟オリジナル
2017-02-04 15:31:531568ブラウズ

リストがあり、その中の数値の各ペアは分数の分子と分母を表します:

[ [numer_1, denom_1] , ... [numer_n, denom_n] ]

すべての数値は正の整数です。

最小公分母 D を見つけ、元の分母 denom を D に置き換え、それらが表す値が変わらないように分子を変更する必要があります。

例:

[ [1, 2], [1, 3], [1, 4] ] // => (6,12)(4,12)(3,12)

ここでは、2,3,4 の最小公倍数は 12 であるため、分母は 12 に変更され、同じ値を維持するために分子もそれに応じて変更されます。

1/2と6/12は同じサイズ、1/3と4/12も同じサイズです。

この質問の鍵は、最小公倍数、またはすべての分母の最小公倍数を見つけることです。

そのため、まず配列をパラメータとして受け取る最小公倍数を見つける scm メソッドが必要です。

配列の最大の要素から累積して、割り切れる場合は最小公倍数になります

//smallest common multiple  
function scm(array){  
    var max = Math.max.apply(null,array);  
    signal:  
    while(true){  
        for(var i=0;i<array.length;i++){  
            if(max % array[i]){  
                max++;  
                continue signal;  
            }  
        }  
        return max;  
    }  
}

もちろん、この方法は最小公倍数を見つけるための最良の方法ではありません。 multiple は、最大の規則的な数値を使用することです。


次に、リスト内のすべての配列の 2 番目の項目 (分母項目) を取り出し、新しい配列を形成し、それを scm メソッドに渡して最小公倍数を取得するのは簡単です。

最後に、リストを反復処理して文字列を連結します。

function convertFrac(lst){  
    var array = [];  
    var str = "";  
    for(var i=0;i<lst.length;i++){  
        array.push(lst[i][1]);  
    }  
    var result = scm(array);  
    for(var i=0;i<lst.length;i++){  
        str += "(" + result / lst[i][1] * lst[i][0] + "," + result + ")";  
    }  
    return str;  
}

上記は JavaScript の興味深い質問の内容です: 最小公倍数 その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。