基本计算器 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); };
|