각 숫자 쌍이 분수의 분자와 분모를 나타내는 목록이 있습니다.
[ [numer_1, denom_1] , ... [numer_n, denom_n] ]
모든 숫자는 양의 정수입니다.
최소 공통분모 D를 찾아 원래 분모를 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; } }
물론 이 방법은 효율적이지 않습니다. 최소 공배수 방법은 최대 공약수를 사용하여 찾는 것이 가장 좋습니다.
그러면 목록의 모든 배열 중 분모 항목인 두 번째 항목을 꺼내서 새 배열을 구성하고 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 중국어 홈페이지(www.php.cn)를 참고해주세요!