[ [numer_1, denom_1] , ... [numer_n, denom_n] ]
所有的數(shù)字都是正整數(shù)。
你得找出最小的公分母D,并用D替換原來(lái)的分母denom,并且改變分子numer,使得他們表示的數(shù)值不變。
例如:
[ [1, 2], [1, 3], [1, 4] ] // => (6,12)(4,12)(3,12)
在這里,2,3,4的最小公分母是12,所以分母改為12,同時(shí)分子相應(yīng)做出改變,以維持?jǐn)?shù)值不變。
1/2和6/12是一樣大的,1/3和4/12也一樣大。
這個(gè)題目關(guān)鍵是找最小公分母,或者說(shuō)所有分母的最小公倍數(shù)。
所以,我們首先需要一個(gè)求最小公倍數(shù)的scm方法,它接收一個(gè)數(shù)組作參數(shù)。
它從數(shù)組最大的元素開(kāi)始累加,看是否每一個(gè)數(shù)組元素都能整除,如果能,那就是最小公倍數(shù)
//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; } }
當(dāng)然,這個(gè)方法效率不高,最好求最小公倍數(shù)的方法是借助最大公約數(shù)。
然后就好辦了,取出列表中所有數(shù)組的第二項(xiàng),也就是分母項(xiàng),組成新數(shù)組,傳入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; }
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com