[英]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.