基本计算器 II

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

  • 输入:s = “3+2*2”

  • 输出:7

  • 输入:s = “ 3/2 “

  • 输出:1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var calculate = function(s) {
s = s.replace(/\s/g, ``);
const stack = [];
let i = 0,
n = s.length,
sign = `+`;
while (i < n) {
if (s[i] === `+` || s[i] === `-` || s[i] === `*` || s[i] === `/`) {
sign = s[i];
i++;
} else {
let num = 0;
while (i < n && s[i] !== '+' && s[i] !== '-' && s[i] !== '*' && s[i] !== '/') {
num=num*10+Number(s[i]);
i++;
}
if(sign===`+`){
stack.push(num);
}else if(sign===`-`){
stack.push(-num);
}else if(sign===`*`){
let x=stack.pop();
stack.push(x*num);
}else if(sign===`/`){
let x=stack.pop();
stack.push(Number(String(x/num).split('.')[0]));
}
}
}
return stack.reduce((pre,curr)=>pre+curr,0);
};