📅  最后修改于: 2023-12-03 15:37:14.032000             🧑  作者: Mango
这是一道计算机科学领域的问题,提供的信息来自于国际空间研究组织(ISRO)的2008年计算机科学考试(CS)。题目为第63道问题。
一个字符串由‘0’到‘9’中的数字和‘+’、‘-’和‘*’三种运算符组成。写一个函数,求该表达式的值。
例如,输入“3+22”,该函数应返回7,因为首先执行乘法运算22=4,再执行加法运算3+4=7。
输入字符串仅包含数字0-9和运算符+、-和*,长度不超过100。
输出表达式的计算结果。
3+2*2
7
这道题目是一个很经典的算法题,其解题思路是用栈来实现表达式求值。具体的算法流程如下:
以下是使用Python语言实现该算法的代码片段:
def evaluate_expression(expression: str) -> int:
operands = []
operators = []
i = 0
while i < len(expression):
if expression[i].isdigit():
operand = 0
while i < len(expression) and expression[i].isdigit():
operand = operand * 10 + int(expression[i])
i += 1
operands.append(operand)
continue
if expression[i] == '(':
operators.append('(')
elif expression[i] == ')':
while operators[-1] != '(':
apply_operator(operands, operators)
operators.pop()
elif expression[i] in {'+', '-', '*', '/'}:
while operators and has_precedence(operators[-1], expression[i]):
apply_operator(operands, operators)
operators.append(expression[i])
i += 1
while operators:
apply_operator(operands, operators)
return operands[-1]
def apply_operator(operands, operators):
right_operand, left_operand = operands.pop(), operands.pop()
operator = operators.pop()
if operator == '+':
operands.append(left_operand + right_operand)
elif operator == '-':
operands.append(left_operand - right_operand)
elif operator == '*':
operands.append(left_operand * right_operand)
elif operator == '/':
operands.append(left_operand / right_operand)
def has_precedence(operator1, operator2):
if operator1 in {'+', '-'} and operator2 in {'*', '/'}:
return False
return True
注意,需要根据具体的输入格式进行调整,并按照输出格式要求输出计算结果。此代码片段为Python实现,返回markdown格式。