2357. 无括号四则混合运算求值

1000ms 256MB 简单
题目描述
给定一个不含括号的四则混合运算算术题表达式(可能包含多余的空格),请编程计算出最终的运算结果。 **运算规则**: 1. 既有乘、除法又有加、减法时,要先计算乘除法,再计算加减法。 2. 同级运算时,按照从左往右的顺序计算。 3. 所有除法运算的结果均只保留整数部分(即直接向零取整,舍弃小数部分)。
输入格式
- 输入一行字符串,表示算术题。 - 字符长度满足 $5 \le \text{长度} \le 100000$。 - 字符串中只包含数字字符以及 `+`、`-`、`*`、`/` 运算符号,不含括号,可能包含空格。 - 算式中的所有运算数(操作数)范围满足 $1 \le \text{运算数} \le 200$。
输出格式
- 输出一个整数,表示算术题的最终计算结果。
样例 1
输入 (Input)
2+3*4-10/6+1/2*4
输出 (Output)
13
- 对于 $100\%$ 的数据:字符串长度在 $[5, 100000]$ 之间,所有运算数在 $[1, 200]$ 之间。 - 题目数据保证算式的每一步运算结果都在 $[-2 \times 10^9, 2 \times 10^9]$ 之间,可安全使用 32 位有符号整型(`int`)或 64 位有符号整型(`long long`)进行计算。 - **除法取整说明**: 本题要求除法直接舍弃小数部分。例如 $-10 / 6$ 的结果为 $-1$;$1 / 2$ 的结果为 $0$。这与 C++ 中整型除法的截断规则一致。 - **算法提示**: 可以使用一个栈来辅助计算。遍历表达式,若遇到加减号,可将带符号的数值(如 `+num` 或 `-num`)压入栈中;若遇到乘除号,则将当前数值与栈顶元素进行乘除运算,并将结果重新压回栈中。遍历结束后,将栈中所有元素累加即为最终结果。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字