前言 & 剧情
任务背景:
话说,从前计算机界有三大帮派,一个叫做后缀表达式,有一个叫做波兰的帝国撑腰,也叫作波兰表达式;一个叫做前缀表达式,和后缀表达式是死对头,专门和波兰对着干,也叫作逆波兰表达式;还有一个小弟叫作中缀表达式的,在电脑计算中身位卑微,然而广泛应用于一般生活中。——到现在,胜负不分。
中缀表达式在计算机界身位卑微,为了维护宇宙的秩序平衡,你决定帮TA一把……
主线任务:拯救中缀表达式 已解锁。
NPC交流阶段:
中缀表达式:大哥帮帮我,他们都说前缀和后缀表达式很好算,说我除了看得懂啥用没有,又难算,写的还多,我该怎么办呐……QAQ
你:相信我,为了宇宙平衡,我一定会帮你的!!(还好只有加减乘除)
思考
嗯,有哪些方法呢?
要么,把中缀表达式转成后缀或前缀表达式;
要么,就直接求值。
作为一个热爱暴力的好青年,当然使用直接求值法。
想要康中缀转后缀的朋友们可以康康这里。
实现方法
学习Python。
上面那句话是谁说的?鄙视竞赛中的py党。
首先,因为要一算括号中的答案,又可能有括号套括号,很容易想到递归。
但是——
递归这种东西,是一般人的脑子想象不出来的。 ——某老师
放弃……
换个思路,俗话说得好,可以不用函数解决任何题目,(我一直认为,面向数据编程是最好的形式,)因为dfs是递归实现的,也可以用栈实现,所以——为什么不想一想用栈实现?
立马动手。
对一个字符,有2种情况一种是数,一种是运算符号。
数好处理,就一位一位加上。
运算符号要考虑优先级: ( , ) > ∗ , / > + , − (,)>*,/>+,- (,)>∗,/>+,−
可以考虑遇到乘除先处理连乘除的情况,遇到括号就处理这一对括号里的所有情况。
开两个栈,一个记录遇到的运算符,一个记录参与运算的数。
遇到非右括号的字符就放进运算符的栈中,读完了一个数就放进数的栈中,然后遇到了相应的符号就处理一下就好啦。
具体实现见代码……
参考代码
Python newbie!!
print(eval(input()))
算了这才是C++……
#define int long long
long