簡體   English   中英

使用 javascript 的數字的不同階乘

[英]Different factorial of a number using javascript

我正在嘗試提出一個 function,它以不同的方式給我一個數字的“階乘”。 例如:

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())
``



`

這就是您的代碼正在執行的操作:
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 應該可以解決您的問題:

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;
}

這是你要找的嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM