题解 | #表达式求值#

表达式求值

https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d

def calculate(expression):
    """
    计算给定算术表达式的值

    :param expression: 字符串描述的算术表达式
    :return: 计算结果
    """

    def parse_number():
        nonlocal i
        j = i
        while j < len(expression) and expression[j].isdigit():
            j += 1
        number = int(expression[i:j])
        i = j
        return number

    def parse_term():
        nonlocal i
        if i >= len(expression):
            return 0
        if expression[i] == "(":
            i += 1
            result = parse_expr()
            i += 1
            return result
        elif expression[i].isdigit():
            return parse_number()
        elif expression[i] == "-":
            i += 1
            return -parse_term()
        else:
            raise ValueError("Invalid expression")

    def parse_factor():
        nonlocal i
        left = parse_term()
        while i < len(expression) and expression[i] in "*/":
            operator = expression[i]
            i += 1
            right = parse_term()
            if operator == "*":
                left *= right
            else:
                left //= right
        return left

    def parse_expr():
        nonlocal i
        left = parse_factor()
        while i < len(expression) and expression[i] in "+-":
            operator = expression[i]
            i += 1
            right = parse_factor()
            if operator == "+":
                left += right
            else:
                left -= right
        return left

    # 解析表达式并计算结果
    i = 0
    return parse_expr()


# 示例用法
expression = input()
result = calculate(expression)
print(result)  # 输出 465

全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务