题目:B4278 [蓝桥杯青少年组国赛 2023] 简单算术题
题目描述
给定一道没有括号的四则混合运算算术题(可能包含多余的空格),请编程计算出结果。运算规则如下:
- 既有乘、除法又有加、减法的,要先算乘除法,再算加减法;
- 同级运算时,要从左往右按顺序计算;
- 所有除法运算的结果都只保留整数部分(直接舍弃小数部分)。
例如 :当算术题为 2 + 3 ∗ 4 − 10 / 6 + 1 / 2 ∗ 4 \tt{2 + 3*4 - 10/6 + 1/2*4} 2+3∗4−10/6+1/2∗4 时:
- 优先计算乘除法,有 3 ∗ 4 = 12 \tt{3*4=12} 3∗4=12, 10 / 6 = 1 \tt{10/6=1} 10/6=1, 1 / 2 ∗ 4 = 0 \tt{1/2*4=0} 1/2∗4=0;
- 然后计算加减法, 2 + 3 ∗ 4 − 10 / 6 + 1 / 2 ∗ 4 = 2 + 12 − 1 + 0 = 13 \tt{2+3*4-10/6+1/2*4} = \tt{2+12-1+0} = \tt{13} 2+3∗4−10/6+1/2∗4=2+12−1+0=13,故输出 13 13 13。
输入格式
输入一个字符串,表示算术题:
- 字符串长度 5 ≤ 5 \leq 5≤ 长度 ≤ 100000 \leq 100000 ≤100000;
- 字符串中只包含数字字符以及 + \tt{+} +, − \tt{-} −, ∗ \tt{*} ∗, / \tt{/} / 运算符;
- 不含括号,可能包含空格;
- 算式中的运算数范围: 1 ≤ 1 \leq 1≤ 运算数 ≤ 200 \leq 200 ≤200。
输出格式
输出一个整数,表示算术题的计算结果。题目数据保证算式的每一步运算的结果都在 − 2 × 10 9 ∼ 2 × 10 9 -2 \times 10^9 \sim 2 \times 10^9 −2×109∼2×109 之间。
输入输出样例 #1
输入 #1
2+3*4-10/6+1/2*4
输出 #1
13
代码
cpp
#include<iostream>
using namespace std;
typedef long long LL;
const int Maxst = 100000 + 10;
LL st[Maxst], tt;
void insert(LL x){
st[++ tt] = x;
}
void dele(){
tt --;
}
bool isempty(){
return tt <= 0;
}
int main(){
LL x;
cin >> x;
insert(x);
char op;
while(cin >> op >> x){
if(op == '*'){
LL res = st[tt] * x;
dele();
insert(res);
}
else if(op == '/'){
LL res = st[tt] / x;
dele();
insert(res);
}
else if(op == '+'){
insert(x);
}
else{
insert(-x);
}
}
LL res = 0;
while(!isempty()){
res += st[tt];
dele();
}
cout << res;
return 0;
}
结果