P1981 [NOIP 2013 普及组] 表达式求值
题目背景
NOIP2013 普及组 T2
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 + 和乘法运算符 *,且没有括号,所有参与运算的数字均为
0
0
0 到
2
31
−
1
2^{31}-1
231−1 之间的整数。
输入数据保证这一行只有 0123456789+* 这
12
12
12 种字符。
输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 4 4 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 % 30\% 30% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100 ≤100 ≤100。
对于 80 % 80\% 80% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 1000 ≤1000 ≤1000。
对于 100 % 100\% 100% 的数据, 0 ≤ 0≤ 0≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100000 ≤100000 ≤100000。
题解
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+2;
stack<long long> s;
long long n, sum = 0;
char x;
int main(){
cin>>n;
s.push(n);
while(cin>>x>>n){
if(x == '+') {
s.push(n);
}else{
int m = s.top();
s.pop();
s.push(m*n%10000);
}
}
while(!s.empty()){
sum += s.top();
s.pop();
}
cout<<sum%10000<<endl;
return 0;
}
631

被折叠的 条评论
为什么被折叠?



