Maison > Article > interface Web > Question JavaScript amusante : le plus petit dénominateur commun
Vous avez une liste dans laquelle chaque paire de nombres représente le numérateur et le dénominateur d'une fraction :
[ [numer_1, denom_1] , ... [numer_n, denom_n] ]
Tous les nombres sont des entiers positifs.
Vous devez trouver le plus petit dénominateur commun D, remplacer le dénominateur d'origine par D, et changer le numérateur pour que les valeurs qu'ils représentent restent inchangées.
Par exemple :
[ [1, 2], [1, 3], [1, 4] ] // => (6,12)(4,12)(3,12)
Ici, le plus petit dénominateur commun de 2,3,4 est 12, donc le dénominateur est changé en 12, et le numérateur est modifié en conséquence pour maintenir le même valeur.
1/2 et 6/12 sont de la même taille, et 1/3 et 4/12 sont également de la même taille.
La clé de cette question est de trouver le plus petit dénominateur commun, ou le plus petit commun multiple de tous les dénominateurs.
Donc, nous avons d'abord besoin d'une méthode scm pour trouver le multiple le plus petit commun, qui reçoit un tableau en paramètre.
Il commence à s'accumuler à partir du plus grand élément du tableau pour voir si chaque élément du tableau peut être divisible. Si c'est le cas, il s'agit du multiple le plus petit commun
//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; } }
Bien sûr, cette méthode est. pas efficace. Un bon moyen de trouver le plus petit commun multiple consiste à utiliser le plus grand commun diviseur.
Ensuite, c'est facile à gérer. Retirez le deuxième élément de tous les tableaux de la liste, qui est l'élément dénominateur, formez un nouveau tableau et transmettez-le dans le scm. méthode pour obtenir le plus petit dénominateur commun.
Enfin, parcourez la liste et concaténez les chaînes.
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; }
Ce qui précède est le contenu des questions intéressantes en JavaScript : le plus petit dénominateur commun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !