问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。输入格式 输入一行,包含一个表达式。输出格式 输出这个表达式的值。样例输入1-2+3*(4-5)样例输出-4数据规模和约定 表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
2 回答
已采纳
慕粉1529473653
TA贡献8条经验 获得超2个赞
根据算术四则运算的规则:
a. 从左算到右
b. 先乘除,后加减
c. 先括号内,后括号外
得到算符优先表,作为计算表达式计算顺序的依据。
如:q1为先来的算符,q2为后来的算符。如3+5+7,前面的+为q1,后面的+为q2,q1>q2。
算法思想
1. 设定两栈:运算符栈,操作数栈;
2. 栈初始化:设操作数栈为空;运算符栈的栈底元素为表达式起始符‘#’;
3. 依次读入字符:是操作数则入操作数栈,是运算符则要判断其与运算符栈栈顶元素的优先级:
if 栈顶算符 > 运算符:则运算符栈出一算符,操作数栈出两操作数,计算,结果压入操作数栈;
运算符 = 栈顶算符:运算符栈出一算符与读取到的算符抵消;
栈顶算符 < 运算符:压入算符栈。
4. 重复执行第3小点,直到读取到‘#’号,与算符栈顶的‘#’相抵消,最后算符栈为空,操作数栈只有一数值,即为结果。
编程的东西自己去练练手,实现的流程都在上面了
添加回答
举报
0/150
提交
取消