给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
时间: 2024-05-09 22:20:22 浏览: 105
可以使用栈来实现表达式的求值。具体步骤如下:
1. 创建一个操作数栈和一个操作符栈。
2. 从左到右遍历表达式中的每个字符,分别进行如下处理:
- 如果当前字符是数字,则将其转换为整数并压入操作数栈中。
- 如果当前字符是加号或乘号,则将其压入操作符栈中。
- 如果当前字符是右括号,则从操作符栈中取出栈顶的操作符和操作数栈中的前两个操作数进行计算,将计算结果压入操作数栈中,并重复此过程直到遇到左括号为止。
3. 最后,操作符栈中可能还有剩余的操作符,需要依次取出并进行计算,直到操作符栈为空。
4. 最终,操作数栈中的唯一元素即为表达式的值。
代码实现如下:
```python
def evaluate(expression):
operands = []
operators = []
i = 0
while i < len(expression):
if expression[i].isdigit():
j = i
while j < len(expression) and expression[j].isdigit():
j += 1
operands.append(int(expression[i:j]))
i = j
elif expression[i] == '+':
operators.append(expression[i])
i += 1
elif expression[i] == '*':
operators.append(expression[i])
i += 1
elif expression[i] == '(':
operators.append(expression[i])
i += 1
elif expression[i] == ')':
while operators[-1] != '(':
op2 = operands.pop()
op1 = operands.pop()
op = operators.pop()
if op == '+':
operands.append(op1 + op2)
elif op == '*':
operands.append(op1 * op2)
operators.pop()
i += 1
while operators:
op2 = operands.pop()
op1 = operands.pop()
op = operators.pop()
if op == '+':
operands.append(op1 + op2)
elif op == '*':
operands.append(op1 * op2)
return operands[0]
```
测试代码如下:
```python
print(evaluate('1+2*3+4*(5+6)')) # 输出 77
```
阅读全文