最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript趣题:最小公分母

来源:懂视网 责编:小采 时间:2020-11-27 20:25:45
文档

JavaScript趣题:最小公分母

JavaScript趣题:最小公分母:你有一个列表,里面的每一对数都代表了一个分数的分子与分母:[ [numer_1, denom_1] , ... [numer_n, denom_n] ]所有的数字都是正整数。你得找出最小的公分母D,并用D替换原来的分母denom,并且改变分子numer,使得他们表示的数值不变。例如:[ [1,
推荐度:
导读JavaScript趣题:最小公分母:你有一个列表,里面的每一对数都代表了一个分数的分子与分母:[ [numer_1, denom_1] , ... [numer_n, denom_n] ]所有的数字都是正整数。你得找出最小的公分母D,并用D替换原来的分母denom,并且改变分子numer,使得他们表示的数值不变。例如:[ [1,

你有一个列表,里面的每一对数都代表了一个分数的分子与分母:

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

所有的数字都是正整数。

你得找出最小的公分母D,并用D替换原来的分母denom,并且改变分子numer,使得他们表示的数值不变。

例如:

[ [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趣题:最小公分母

JavaScript趣题:最小公分母:你有一个列表,里面的每一对数都代表了一个分数的分子与分母:[ [numer_1, denom_1] , ... [numer_n, denom_n] ]所有的数字都是正整数。你得找出最小的公分母D,并用D替换原来的分母denom,并且改变分子numer,使得他们表示的数值不变。例如:[ [1,
推荐度:
标签: js 公分母 最小
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top