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
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功