[js] 最小公倍数、化简分数、最大公约数
#化简分数
function purify(list) { var x, y; var temp = []; for (var i = 0; i < list.length; i++) { var son = list[i][0], mother = list[i][1]; var j = 2; while (j <= son && j <= mother) { x = son / j; y = mother / j; ++j; if ((x + '').indexOf('.') == -1 && (y + '').indexOf('.') == -1) { son = x; mother = y; j = 2; } console.log(x, y); } temp.push([son, mother]); } return temp; } var list = [ [2, 4], [3, 9], [4, 16] ]
#最小公倍数
function convertFrac(lst) { var lowest = lst[0][1]; var status = true; for (var i = 0; i < lst.length - 1; i++) { for (var j = 2; j <= lowest && j <= lst[i + 1][1]; j++) { if (lowest % j == 0 && lst[i + 1][1] % j == 0) { lowest = lowest * lst[i + 1][1] / j; status = false; break; } } if (status) { lowest = lowest * lst[i + 1][1]; } } var str = ''; lst.forEach(function(v) { str += '(' + v[0] * lowest / v[1] + ',' + lowest + ')'; }) return str; } var lst = [ [1, 2], [1, 3], [1, 4] ]
#
function convertFrac(lst) { let LCM = lst.reduce((v1, v2) => { return LeastCommonMultiple(v1, v2[1]); }, 1) let result = ''; lst.forEach((v) => { let temp = LCM / v[1]; result += `(${v[0] * temp},${LCM})`; }); return result; } function GreatestCommonDivisor(m, n) { let bigger, smaller, remainder; if (m > n) { bigger = m; smaller = n; } else if (m < n) { bigger = n; smaller = m; } else { return m; } while (remainder = bigger % smaller) { bigger = smaller; smaller = remainder; } return smaller; } function LeastCommonMultiple(m, n) { return m * n / GreatestCommonDivisor(m, n); }