You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于RPN算法计算转换后的表达式数值?

RPN(逆波兰表示法)计算核心逻辑与实例演示

计算RPN格式的表达式,核心依赖**栈(Stack)**数据结构,遵循以下规则:

  • 遍历RPN字符串的每个元素(按空格拆分)
  • 遇到数字,直接压入栈
  • 遇到运算符,从栈顶弹出两个元素:先弹出的是右操作数,后弹出的是左操作数,用运算符计算后将结果压回栈
  • 遍历完成后,栈中仅剩的元素就是最终结果

针对你的RPN表达式「3 23 24 / 34 * 24 / +」的分步计算:

拆分后的元素列表:["3", "23", "24", "/", "34", "*", "24", "/", "+"]

  1. 处理"3" → 栈:[3]
  2. 处理"23" → 栈:[3, 23]
  3. 处理"24" → 栈:[3, 23, 24]
  4. 处理"/":弹出24和23,计算23 / 24 ≈ 0.9583 → 栈:[3, 0.9583]
  5. 处理"34" → 栈:[3, 0.9583, 34]
  6. 处理"*":弹出34和0.9583,计算0.9583 * 34 ≈ 32.5833 → 栈:[3, 32.5833]
  7. 处理"24" → 栈:[3, 32.5833, 24]
  8. 处理"/":弹出24和32.5833,计算32.5833 / 24 ≈ 1.3576 → 栈:[3, 1.3576]
  9. 处理"+":弹出1.3576和3,计算3 + 1.3576 ≈ 4.3576 → 栈:[4.3576]

最终结果约为4.3576(保留四位小数)

代码实现示例(Python)

def calculate_rpn(rpn_str):
    stack = []
    tokens = rpn_str.split()
    for token in tokens:
        if token in '+-*/':
            # 弹出右、左操作数
            right = stack.pop()
            left = stack.pop()
            if token == '+':
                res = left + right
            elif token == '-':
                res = left - right
            elif token == '*':
                res = left * right
            elif token == '/':
                # 浮点除法,避免整数除法截断
                res = left / right
            stack.append(res)
        else:
            # 转换为浮点型,兼容整数和小数输入
            stack.append(float(token))
    # 遍历结束后栈顶即为结果
    return stack[0]

# 测试你的表达式
target_rpn = "3 23 24 / 34 * 24 / +"
final_result = calculate_rpn(target_rpn)
print(f"计算结果:{round(final_result, 4)}")

内容的提问来源于stack exchange,提问作者Tomasz Okraszewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:10:33