javascript代码实例教程-js 求一个数组元素的最小公倍数

发布时间:2019-01-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-js 求一个数组元素的最小公倍数脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

今天我在网上查 “js 求一个数组元素的最小公倍数”,不管是GOOGLE还是百度,查出来的答案竟然都是一样的,最关键的是这是错误的。

错误在哪那!刚一看感觉是正确的,而且你输入几个不同的数组,输出的是正确的,but,当我输入[2,3,4]的时候竟然是24,这就很明显不对了,还有输入[0,1]的时候输出的是1,

我发现了这两点不对。好了贴一下我自己的代码。

VAR lcm = function () {
// TODO: PRogram me
var m=0;
for(var i=0;i {
if(arguments[i]==0)
return 0;
m=gcd(m,arguments[i]);
}
return m;
};
function gcd(a,b){
var maxNum=Math.max(a,b),minNum=Math.min(a,b),count;
if(a===0||b===0)
return maxNum;
for(var i=1;i<=maxNum;i++)
{
count=minNum*i;
if(count%maxNum===0)
{
return count;
break;
}

}
}

传入的数组参数是非负的整数。

如果这还不过瘾的话,下面是大牛的代码:

var lcm = function () {
function gcd(a,b) {
if (a == 0) return b;
return gcd(b%a, a);
}
return Array.prototyPE.slice.apply(arguments).reduce(function(a,b) {return a*b / gcd(a,b);}, 1);
};

是不是超级简洁。

如果觉得还不够的话:

var lcm = function ()
{
var numbers = Array.prototype.slice.call(arguments);
if (!numbers.length)
return null;


if (!Math.min.apply(null, numbers))
return 0;


return numbers.reduce(lcmOf2Numbers, numbers.pop());
};


var lcmOf2Numbers = function (number1, number2)
{
return number1 * number2 / gcdOf2Numbers(number1, number2);
};


var gcdOf2Numbers = function (number1, number2)
{
return !number2 ? number1 : gcdOf2Numbers(number2, number1 % number2);
};

那么是不是还可以这样:

var lcm = function () {

if(!arguments.length) return false;
if(arguments.length == 1) return arguments[0];


var length = arguments.length,
base = arguments[0];


for( var i=1; i < length; i++ ){


var current = arguments[i],
bbase = base;


while( base && current ){
if( base > current ){
base = base % current;
} else {
current = current % base;
}
}


base = (bbase * arguments[i])/(base+current);
}
return base;
};

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦!&nbsp;js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-js 求一个数组元素的最小公倍数全部内容,希望文章能够帮你解决javascript代码实例教程-js 求一个数组元素的最小公倍数所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。