我从学习代码中休息了一下。我回来了,一切都从我的头上消失了。我想创建一个简单的程序来查找可被任何整数整除的数字(例如,可分为5,6,9,10或4,7,25)
到目前为止我做到了这一点:
var multipleOf = function() {
for (var i = 1; i < 1000; i*2) {
if (i%3 === 0) {
if (i%4 === 0) {
if (i%5 === 0) {
return(i);
}
}
}
}
};
但是有一些问题。 它似乎没有工作(我认为一些python可能会滑入它) 它不可扩展,我不得不为不同数量的数字更改代码(例如,所有素数1-100将是大量编码而不是仅仅输入数字)
有人可以帮我制作可以运行的代码:
console.log(multipleOf(2,5,8,12,15,17,20))
答案 0 :(得分:2)
JavaScript有一个简洁的东西,用于松散地定义参数,恰当地命名为arguments
。
根据我的理解,你实际需要的是所提供参数的最低公倍数,这是一个相当简单的操作。这是一种方法,使用辅助函数来计算一对数字的最小公倍数,这又需要一个函数来计算它们的GCD。
function multipleOf() {
function gcf(a, b) {
return ( b == 0 ) ? a : gcf(b, a % b);
}
function lcm(a, b) {
return a * b / gcf(a,b);
}
function recurse(ar) {
if (ar.length > 1) {
// take the first two numbers, caculate their LCM, and put the result
// back into the stack. Reduces array length by 1.
ar.push( lcm( ar.shift() , ar.shift() ) );
return recurse( ar );
}
else return ar[0];
}
// take arguments and build an array
// arguments is an array-like object, but it doesn't have methods
// such as `shift` or `push`, required for `recurse`
// take this opportunity to ensure we have numbers.
var ar = [], l = arguments.length, i;
for( i=0; i<l; i++) ar[i] = parseInt(arguments[i],10);
return recurse(ar);
}
答案 1 :(得分:0)
您可以传递数组而不是多个数。
var multipleOf = function(nos) {
for(var i=0; i< nos.length; i++) {
// Now you can use,
//nos[i]; to access each passed integer.
}
};
var nos = [2,5,8,12,15,17,20];
multipleof(nos);
或者您可以使用arguments
var multipleOf = function() {
// Loop through arguments
for(var i=0; i< arguments.length; i++) {
// Now you can use,
//arguments[i]; to access each passed integer.
}
};
multipleOf(2,5,8,12,15,17,20);
即。 arguments
是一种特殊类型的数组(虽然它不是真实的),你可以循环遍历它以接受传递的参数。
答案 2 :(得分:0)
到目前为止,这些解决方案似乎指向构建一个函数来判断数字X是否可被整数数组[a,b,c,d]整除。
我认为使用类似sieve of Eratostenes之类的内容可以更有效地避免查询每个可能的数字,而是建立一个符合要求的数字列表。
我开始将原始输入扩展到每个值的每个素数除数,然后丢弃重复项。从那时起,我们知道素数阵列[a,b,c]的所有倍数都以
的形式出现Math.pow(a,x) * Math.pow(b,y) * Math.pow(c,z)
唯一尚未定义的逻辑是我应该以什么顺序颠覆每个权力以找到下一个数字。