【NOIP 2013 普及组】表达式求值(洛谷题面

题目

题目描述:

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

输入格式:

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 + 和乘法运算符 *,且没有括号,所有参与运算的数字均为 0023112^{31}-1 之间的整数。

输入数据保证这一行只有 0123456789+*1212 种字符。

输出格式:

一个整数,表示这个表达式的值。

注意:当答案长度多于 44 位时,请只输出最后 位,前导 不输出。

数据范围与说明:

对于 30%30\% 的数据,00≤ 表达式中加法运算符和乘法运算符的总数 100≤100

对于 80%80\% 的数据,00≤ 表达式中加法运算符和乘法运算符的总数 1000≤1000

对于 100%100\% 的数据,00≤ 表达式中加法运算符和乘法运算符的总数 100000≤100000

输入输出样例 #1

输入:

1
1+1*3+4

输出:

1
8

输入输出样例 #2

输入:

1
1+1234567890*1

输出:

1
7891

输入输出样例 #3

输入:

1
1+1000000003*1

输出:

1
4

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
using namespace std;
stack<int> s;
int main()
{
char c;
int a,b;
int n=10000;
a%=n;
cin>>a;
s.push(a);
while(cin>>c>>b){
if(c=='*'){
a=s.top();
s.pop();
s.push(a*b%n);
}else{
s.push(b);
}
}
int sum=0;
while(!s.empty()){
sum+=s.top();
sum%=n;
s.pop();
}
cout<<sum<<endl;
return 0;
}