fix: 四则运算
This commit is contained in:
parent
cdea1f2ba6
commit
eeb4f8a0fa
96
lib/calc.js
96
lib/calc.js
@ -1,48 +1,54 @@
|
|||||||
module.exports = function (s) {
|
/* eslint-disable */
|
||||||
s = s.trim();
|
// 四则运算
|
||||||
const stack = new Array();
|
|
||||||
let preSign = '+';
|
!(function () {
|
||||||
let numStr = '';
|
var calculate = function (s) {
|
||||||
const n = s.length;
|
s = s.trim();
|
||||||
for (let i = 0; i < n; ++i) {
|
const stack = new Array();
|
||||||
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
let preSign = '+';
|
||||||
numStr += s[i];
|
let numStr = '';
|
||||||
} else if (s[i] === '(') {
|
const n = s.length;
|
||||||
let isClose = 1;
|
for (let i = 0; i < n; ++i) {
|
||||||
let j = i;
|
if (s[i] === '.' || (!isNaN(Number(s[i])) && s[i] !== ' ')) {
|
||||||
while (isClose > 0) {
|
numStr += s[i];
|
||||||
j += 1;
|
} else if (s[i] === '(') {
|
||||||
if (s[j] === '(') isClose += 1;
|
let isClose = 1;
|
||||||
if (s[j] === ')') 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))}`;
|
if ((isNaN(Number(s[i])) && s[i] !== '.') || i === n - 1) {
|
||||||
i = j;
|
let num = parseFloat(numStr);
|
||||||
}
|
switch (preSign) {
|
||||||
if (isNaN(Number(s[i]) && s[i] !== '.') || i === n - 1) {
|
case '+':
|
||||||
let num = parseFloat(numStr);
|
stack.push(num);
|
||||||
switch (preSign) {
|
break;
|
||||||
case '+':
|
case '-':
|
||||||
stack.push(num);
|
stack.push(-num);
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '*':
|
||||||
stack.push(-num);
|
stack.push(stack.pop() * num);
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '/':
|
||||||
stack.push(stack.pop() * num);
|
stack.push(stack.pop() / num);
|
||||||
break;
|
break;
|
||||||
case '/':
|
default:
|
||||||
stack.push(stack.pop() / num);
|
break;
|
||||||
break;
|
}
|
||||||
default:
|
preSign = s[i];
|
||||||
break;
|
numStr = '';
|
||||||
}
|
}
|
||||||
preSign = s[i];
|
|
||||||
numStr = '';
|
|
||||||
}
|
}
|
||||||
}
|
let ans = 0;
|
||||||
let ans = 0;
|
while (stack.length) {
|
||||||
while (stack.length) {
|
ans += stack.pop();
|
||||||
ans += stack.pop();
|
}
|
||||||
}
|
return ans;
|
||||||
return ans;
|
};
|
||||||
};
|
module.exports = calculate;
|
||||||
|
})();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user