描述
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入描述:
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出描述:
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出:
输出:
3.00
13.36
思路:
①设立运算符和运算数两个栈,,一个用来存储运算符,另一个用来存储运算数。
②在运算符栈中放置一个特殊运算符#,其优先级最低。
③将表达式尾部添加一个特殊运算符$,其优先级次低。
④从左至右依次遍历字符串,若遍历到运算符,则将其与运算符栈的栈顶元素进行比较,若运算符栈的栈顶的优先级小于该运算符,则将该运算符压入运算符栈;若运算符栈的栈顶的优先级大于该运算符,则弹出该栈顶运算符,从运算数栈中依次弹出运算数,完成弹出运算符对应的运算后,再将该结果压入运算数栈。
⑤若遍历到表达式中的运算数,则直接压入运算数栈。
⑥若运算符栈中仅剩两个特殊运算符#和$,则表达式运算结束,此时运算数栈中唯一的数字就是表达式的值。
源代码:
#include
#include
#include
提交结果:
![[保研/考研机试] KY129 简单计算器 浙江大学复试上机题 C++实现_第1张图片](http://img.e-com-net.com/image/info8/4de4579dd9474426a5b7733051de7ce8.jpg)