From eeb4f8a0faf632e60a436002ef4f8df2f0fc3c53 Mon Sep 17 00:00:00 2001 From: CPPAlien Date: Tue, 22 Jun 2021 16:45:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=9B=E5=88=99=E8=BF=90=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/calc.js | 96 ++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/lib/calc.js b/lib/calc.js index 88ea3e6..e6788de 100644 --- a/lib/calc.js +++ b/lib/calc.js @@ -1,48 +1,54 @@ -module.exports = function (s) { - s = s.trim(); - const stack = new Array(); - let preSign = '+'; - let numStr = ''; - const n = s.length; - for (let i = 0; i < n; ++i) { - if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) { - numStr += s[i]; - } else if (s[i] === '(') { - let isClose = 1; - let j = i; - while (isClose > 0) { - j += 1; - if (s[j] === '(') isClose += 1; - if (s[j] === ')') isClose -= 1; +/* eslint-disable */ +// 四则运算 + +!(function () { + var calculate = function (s) { + s = s.trim(); + const stack = new Array(); + let preSign = '+'; + let numStr = ''; + const n = s.length; + for (let i = 0; i < n; ++i) { + if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) { + numStr += s[i]; + } else if (s[i] === '(') { + let isClose = 1; + let j = i; + while (isClose > 0) { + j += 1; + if (s[j] === '(') isClose += 1; + if (s[j] === ')') isClose -= 1; + } + numStr = `${calculate(s.slice(i + 1, j))}`; + i = j; } - numStr = `${calculate(s.slice(i + 1, j))}`; - i = j; - } - if (isNaN(Number(s[i]) && s[i] !== '.') || i === n - 1) { - let num = parseFloat(numStr); - switch (preSign) { - case '+': - stack.push(num); - break; - case '-': - stack.push(-num); - break; - case '*': - stack.push(stack.pop() * num); - break; - case '/': - stack.push(stack.pop() / num); - break; - default: - break; + if ((isNaN(Number(s[i])) && s[i] !== '.') || i === n - 1) { + let num = parseFloat(numStr); + switch (preSign) { + case '+': + stack.push(num); + break; + case '-': + stack.push(-num); + break; + case '*': + stack.push(stack.pop() * num); + break; + case '/': + stack.push(stack.pop() / num); + break; + default: + break; + } + preSign = s[i]; + numStr = ''; } - preSign = s[i]; - numStr = ''; } - } - let ans = 0; - while (stack.length) { - ans += stack.pop(); - } - return ans; -}; \ No newline at end of file + let ans = 0; + while (stack.length) { + ans += stack.pop(); + } + return ans; + }; + module.exports = calculate; +})();