我已经制作了一个javascript,它会给出输入到数组中的所有数字的阶乘(减去数组中“0”的第一个数字,我必须将其放在那里以便填充,以使代码正确运行)
fact = [0, 4, 2, 5, 3];
factorial = 1;
for (x = 1; x < fact.length; x++) {
for (i = 1; i <= fact[x]; i++) {
factorial *= i;
if (fact[x] === i) {
console.log(fact[x] + "!" + " " + "=" + " " + factorial);
factorial = 1;
}
}
}``
这里的一切正常是console.log:
4! = 24
2! = 2
5! = 120
3! = 6
我的问题是如何将变量x和i的初始值更改为0,这样我就可以删除我的数组中的空格键“0”,而不会将所有内容输出为0,因为目前我将变量设置为0以启动和删除在我的数组中空格持有者“0”,等式变为:
factorial * = 0;
这将使一切都等于零,我不希望这样!我很抱歉,我的问题很难写,谢谢你的帮助!
答案 0 :(得分:3)
的 jsFiddle Demo
强> 的
你可以用这样的while循环替换内部for循环:
var fact = [4, 2, 5, 3];
for (x = 0; x < fact.length; x++) {
var factorial = fact[x];
var result = 1;
while( factorial > 0 ){
result *= factorial--;
}
console.log(fact[x] + "!" + " " + "=" + " " + result);
}
答案 1 :(得分:1)
另一种方法是将你的循环颠倒过来:
for (i = n; i > 0; i--) {
fact *= i;
}
这可以避免循环中0
的问题。您从该号码开始,然后向后搜索,直到您点击1
。
您还可以通过将factorial
生成器函数从循环中拆分到数组中来简化一些事情:
function each (a, f) {
var i = 0,
r = [];
for (i = 0; i < a.length; i++) {
r.push(f(a[i]));
}
return r;
}
function factorial (n) {
var i = 0,
fact = 1;
for (i = n; i > 0; i--) {
fact *= i;
}
return fact;
}
var factorials = each([4, 2, 5, 3], factorial);
console.log(factorials.join(', '));
修改强>
答案 2 :(得分:0)
我的问题是如何将变量x和i的初始值更改为0,这样我就可以删除我的空间持有者“0”
为什么要将i
更改为0?它根本与fact
数组无关。你的担心是错误的。如果您删除占位符0
:
fact = [4, 2, 5, 3];
factorial = 1;
for (x = 0; x < fact.length; x++) {
for (i = 1; i <= fact[x]; i++) {
factorial *= i;
if (fact[x] === i) {
console.log(fact[x] + "!" + " " + "=" + " " + factorial);
factorial = 1;
}
}
}