原题链接(洛谷):https://www.luogu.com.cn/problem/P1981
原题Markdown:
# [NOIP2013 普及组] 表达式求值
## 题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
## 输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “$+$” 和乘法运算符 “$ \times $”,且没有括号,所有参与运算的数字均为 $0$ 到 $2^{31}-1$ 之间的整数。
输入数据保证这一行只有 $ 0-9$、$+$、$ \times $ 这 $12 $种字符。
## 输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 $4$ 位时,请只输出最后 $ 4$ 位,前导 $ 0$ 不输出。
## 样例 #1
### 样例输入 #1
```
1+1*3+4
```
### 样例输出 #1
```
8
```
## 样例 #2
### 样例输入 #2
```
1+1234567890*1
```
### 样例输出 #2
```
7891
```
## 样例 #3
### 样例输入 #3
```
1+1000000003*1
```
### 样例输出 #3
```
4
```
## 提示
对于 $30\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤100$。
对于 $80\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤1000$。
对于 $100\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤100000$。
题解:
#include<stack> //栈的头文件
#include<iostream> //函数库
using namespace std;
stack <int> s; //栈
int sum;//求答案的
char b; //‘*’和‘+’的输入
int f; //代替值的变量
int a,c; //输入的整数
int main(){//主函数
cin>>a; //先输入
a=a%10000; //直接取余
s.push(a); //放入栈里
while(cin>>b>>c){ //输入符号和后面的数字
if(b=='*'){ //判断为什么符号
f=s.top(); //先拿一个存值
s.pop(); //在栈中取出
s.push(f*c%10000); //乘后放进栈且求余
}
else s.push(c); //是加法直接放进去
}
while(s.size()){ //循环栈的深度
sum+=s.top() ; //求加法
sum%=10000; //求余
s.pop(); //将栈顶去除
}
cout<<sum<<endl; //输出最后的值
return 0; //撒花
}
制作不易,所有代码及注释均本人编写,求给好评~~~
希望对你有所帮助~~~