原题链接
typescript
function calculate(s: string): number {
const stack = [];
let sign = '+';
let num = 0;
for(let i = 0; i < s.length; i++) {
if(!isNaN(Number(s[i])) && s[i] !== ' ') {
num = num * 10 + Number(s[i]);
}
if(isNaN(Number(s[i])) || i === s.length - 1) {
switch(sign) {
case '+' : {
stack.push(num);
break;
}
case '-' : {
stack.push(-num);
break;
}
case '*' : {
stack.push(stack.pop() * num);
break;
}
case '/' :{
//浮点数不支持位运算,过程中会自动转化成整数,利用这一点,可以将浮点数与0进行位或运算即可达到取整目的。
stack.push(stack.pop() / num | 0);
break;
}
default: {}
}
sign = s[i];
num = 0;
}
}
return stack.reduce((prev, cur) => prev + cur, 0);
};