【问题描述】输入一个算术表达式以#作为结束符如:1+23#计算该表达式的值样例中只给出了0~9以内的四则运算测试数据中有10以上的四则运算如果要使程序完全通过所有测试则要考虑2位数以上的运算。请把代码补充完整输入形式:1+23-42#输出形式:7顺序实现表达式求值#includeiostream#includestdlibh#includestdiohusing namespace std;顺序栈
【问题描述】输入一个算术表达式,以#作为结束符,如:(1+2)*3#,计算该表达式的值(样例中只给出了0~9以内的四则运算,测试数据中有10以上的四则运算,如果要使程序完全通过所有测试,则要考虑2位数以上的运算。),请把代码补充完整
【输入形式】 (1+2)*3-4/2#
【输出形式】 7
【样例说明】 输入的算术表达式为:(1+2)*3-4/2#,计算结果为7。
算法实现思路:
- 定义两个栈,一个操作数栈和一个运算符栈,其中操作数栈用于存放数字,运算符栈用于存放运算符以及左右括号。
- 从左到右依次遍历表达式,如果是数字则直接进入操作数栈,如果是运算符则分如下情况: (1)如果运算符栈为空或栈顶为左括号,则直接将运算符进入运算符栈。 (2)如果当前运算符优先级大于栈顶运算符优先级,则直接将运算符进入运算符栈。 (3)如果当前运算符优先级等于栈顶运算符优先级,则弹出栈顶运算符。 (4)如果当前运算符优先级小于栈顶运算符优先级,则弹出栈顶运算符,同时从操作数栈中弹出两个操作数进行运算,将结果压入操作数栈中。直到当前运算符优先级大于栈顶运算符优先级或者栈为空时,将运算符压入运算符栈中。 (5)如果当前字符为右括号,则从运算符栈中弹出运算符,直到弹出左括号为止。如果运算符栈为空,则表达式有误。
- 当遍历完整个表达式后,如果运算符栈不为空,则弹出运算符并进行运算,将结果压入操作数栈中,直到运算符栈为空。此时操作数栈中只剩下一个元素,即为表达式的计算结果。
参考代码如下
原文地址: https://www.cveoy.top/t/topic/dxlI 著作权归作者所有。请勿转载和采集!