CSP认证201903-2 二十四点
可以看到,这个问题就是简单的表达式求值,而且只有4个数,没有括号,可以用栈很简单的解决
步骤说明:
- 使用两个栈,一个保存操作数,一个保存运算符。
- 扫描表达式字符串,如果是数字,则将数字入栈。
- 如果是运算符,则需要看优先级;如果这是第一个运算符或者这个运算符的优先级比栈顶的运算符的优先级更高,则将这个运算符入栈。
- 如果扫描到一个运算符A,运算符A的优先级不大于栈顶的运算符top的优先级,则将top弹出,然后弹出两个操作数进行运算,将结果入栈,最后将运算符A压入栈中。
- 如果字符串扫描完毕,但是运算符栈仍然不空,则弹出一个运算符,弹出两个操作数,运算后将结果入栈,循环操作,直至运算符栈为空。
总结步骤
- 扫描到数字入栈
- 扫描到操作符,一定会入栈,入站之前判断是否需要弹出栈顶的操作符。
-
扫描完毕,清空(弹出一个运算符,弹出两个操作数)操作符栈
#include <iostream> using namespace std; class Op{ private: char op;//运