课程习题

1、四则运算

给定一个字符串,实现一个calc函数模拟四则运算并返回结果。
示例1:
输入:(1 + 2)
输出:3
示例2:
输入:((1 + 2) 3)
输出:9
示例3:
输入:((1
(1 + 2)) / 3)
输出:1
注意:给定的表达式一定是整数运算且合法,不涉及小数。且全部使用小括号()表示其优先级。注意表达式可能带有空格

  1. // 利用两个栈分别保存数值和运算符,当碰到右括号的时候出栈两个数值,并出栈一个操作符进行计算,将计算结果push进数值栈
  2. function calc (expression) {
  3. expression = expression.replace(/\s/g, '')
  4. const numberStack = []
  5. const operatorStack = []
  6. for (const char of expression) {
  7. if (char === ')') {
  8. const a = numberStack.pop()
  9. const b = numberStack.pop()
  10. const operator = operatorStack.pop()
  11. switch (operator) {
  12. case '+':
  13. numberStack.push(a + b)
  14. break
  15. case '-':
  16. numberStack.push(b - a)
  17. break
  18. case '*':
  19. numberStack.push(a * b)
  20. break
  21. case '/':
  22. numberStack.push(b / a)
  23. break
  24. default:
  25. break
  26. }
  27. } else if (char === '+' || char === '-' || char === '*' || char === '/') {
  28. operatorStack.push(char)
  29. } else if (/\d/.test(char)) {
  30. numberStack.push(char * 1)
  31. }
  32. }
  33. return numberStack.pop()
  34. }