问题描述:标准输入读入一个整数算数表达式,计算结果并输出
要求:
1.表达式中只有+ ,-,,/,表达式末尾的=,表达式中可能出现空格
2.表达式中可能出现圆括号,括号可以嵌套,不会出现错误的表达式
3.出现除号/时,以整数相除进行运算,结果仍是整数。
输入形式:从键盘输入一个以=结尾的算术运算表达式
输出形式:在屏幕上输出计算表达结果,为整数。
样例1:24/(1+2+36/6/2-2)(12/2/2)=
样例一输出
18
问题分析:
上文中是中缀表达式,在计算机中我们常常转化成后缀表达式
a+b
a+bc
a+bc+(d*e+f)/g
转化成后缀表达式为:
ab+
abc*+
abc*+de*f+g/+
中缀到后缀的转换规则
从左到右遍历中缀表达式中每一个数字和符号:
如果是数字直接输出,即成为后缀表达式的一部分:
若是符号:
若是(,则将栈中元素弹出并输出,直到遇到(,(弹出但是不输出
若是(,+,*等符号,则从栈中弹出并输出优先级高于(或等于)当前的符号,直到遇到一个优先级低的符号;然后将当前符号压入栈中。
遍历结束,将栈中的所有元素依次弹出,直到栈为空。
后缀表达式的计算:
从左到右遍历后缀表达式中每个数字和符号:
如果是数字直接进栈;
若是运算符±*/,则从栈中弹出两个数字进行运算,并将计算结果进栈。
遍历结束,将计算结果从栈中弹出(栈中应该只有一个数字,否则表达式有错)。
思路:设两个栈,一个数据栈,用来转化,一个计算栈。