一、问题描述
【题目描述】
小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)
【输入】
共1行,为一个算式。
【输出】
共1行,就是密码。
二、知识点考察
本题考察的是数据结构之栈的运用。可以使用C++ STL 内置的stack来解决此问题,使用stack需要引入对应的头文件:#include<stack>
三、解题思路
针对该题目,我们需要使用到两个栈,一个栈用来存储数值,不妨命名为values,另一个栈用来存储操作符,不妨命名为operators,针对不同的数据内容[数字或者运算符],需要做不同的处理。
在这里,为了大家更方便理解,对输入输出样例进行一个模拟:
(1)准备两个栈,一个values,一个operators,针对样例数据,如下所示:
(2)计算规则如下
(3)计算过程模拟
有计算表达式如右:1+(3+2)*(7^2+6*9)/(2),现按照以上计算规则进行计算过程模拟
① 从左往右遍历字符串,遇到数字1,将其放入values栈中
② 遇到运算符+,因为当前operators栈为空,因此直接将其放入operators栈中
③ 遇到运算符(,根据规则,直接将运算符(其放入operators栈中
④ 遇到数字3,根据规则,将数字入栈到values中
⑤ 遇到运算符+,根据规则,由于当前operators不为空,因此需要比较+和operators栈顶运算符的优先级,发现+的优先级高于(,因此将+入栈