使用javascript计算一个数的不同阶乘

lf3rwulv  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(128)

我试图用一种不同的方式来给出一个数字的阶乘,例如:
15! = 15*14/13+12-11*10/9...等等。
我试着先创建一个数组,然后创建一个循环来得到结果。但是它没有像预期的那样工作。下面的代码预期的结果是13。

function createList(n) {
    let input = n
    let list = [input]

    for(i = input-1; i >= 1; i--) {
        list.push(i)
    }
    return list
}


function factorialDiff() {
    let elements = createList(12)
    var res = elements.shift()
    while(elements.length >= 1) {
    if(elements.length == 0) {
        return res
    }
    res *= elements.shift()
    if(elements.length == 0) {
        return res
    }
    res /= elements.shift()
    if(elements.length == 0) {
        return res
    }
    res += elements.shift()
    if(elements.length == 0) {
        return res
    }
    res -= elements.shift()
    if(elementos.length == 0) {
        return res
    }
    }
    return res 
}
console.log(factorialDiff())
``


`
bvn4nwqk

bvn4nwqk1#

这是您的代码正在执行的操作:
console.log(((((12*11)/10+9-8)*7/6+5-4)*3)/2+1);
在数学中,惯例是先解乘/除,然后再解加/减。然而,你所做的代码是从左到右解这些运算。
例如:

console.log(12*11/10+9-8*7/6+5-4*3/2+1); // returns 12.86

console.log(((((12*11)/10+9-8)*7/6+5-4)*3)/2+1); // returns 27.35 just like your function does

如果您的预期行为是第一行,则以下函数应该可以解决您的问题:

function factorialDiff() {
    const elements = createList(12);
    let res1 = elements.shift();
    let res2 = elements.shift();
    let res3 = elements.shift();
    let res = (res1*res2/res3)
    while(elements.length >= 1) {
        res += elements.shift();
        if(elements.length == 0) {
            return res;
        }
        res1 = elements.shift();
        if(elements.length == 0) {
            return res*res1;
        }
        res2 = elements.shift();
        if(elements.length == 0) {
            return res*res1/res2;
        }
        res3 = elements.shift();
        res -= (res1*res2/res3);
        if(elements.length == 0) {
            return res;
        }        
    }
    return res;
}
qpgpyjmq

qpgpyjmq2#

这就是你要找的吗?

function myFactorial(num) {
        var result = num;
        operatorNum = 0;
        for(i = num - 1; i >= 1; i--){
            if(operatorNum % 4 == 0){ // "*"
                result = result * i;
            }else if (operatorNum % 4 == 1){  // "/"
                result = result / i;
            }else if (operatorNum % 4 == 2){ // "+"
                result = result + i;
            }else{ // "-"
                result = result - i;
            }
            operatorNum++;
        }
        return result;
    }
    console.log(myFactorial(4)); // logs 7

相关问题