A26398. 表达式的值
填空题
困难
知识点
题目描述
表达式的值
题目描述
后缀表达式,它的定义如下:
单个数字如 6,8 等都是后缀表达式;
如果 e1,e2 都是后缀表达式,则 e1 e2 +e1 e2 +、e1 e2 −e1 e2 −、e1 e2 ∗e1 e2 ∗ 都是后缀表达式;
不满足以上两条规则的表达式都不是后缀表达式。
给定一个后缀表达式(保证合法),请计算表达式的值,并输出它模 10007 的余数。
注意,为了方便起见,我们省略了除法,同时也规定在表达式中出现的数字只能由一位数构成。
输入格式
一个字符序列:表示输入的后缀表达式。每个字符间用一个空格分开。保证输入字符只可能出现 0 到 9 及 +,-,* 三种运算符,且构成一个合法的后缀表达式。
输出格式
单个数字:表示表达式的值模 10007 的余数,注意余数必须大于或等于零。
输入样例#1
3 4 +输出样例#1
7输入样例#2
2 3 3 + *输出样例#2
12输入样例#3
1 2 * 3 + 4 * 5 - 6 + 7 * 8 - 9 +输出样例#3
148输入样例#4
1 5 -输出样例#4
6数据范围
记输入的可见字符数量为 n,对于 50% 的数据,1≤n≤100;
对于 100% 的数据,1≤n≤100,000。
样例2解释:
2*(3+3)=12
参考答案
#include <iostream>
#include <stack>
using namespace std;
const int mod = 10007;
int main() {
stack<int> s;
char c;
while (cin >> c) {
if (c >= '0' && c <= '9') {
s.push(c - '0');
} else {
int b = s.top(); s.pop();
int a = s.top(); s.pop();
if (c == '+') s.push((a + b) % mod);
else if (c == '-') s.push((a - b + mod) % mod);
else if (c == '*') s.push((a * b) % mod);
}
}
cout << s.top() << endl;
return 0;
}
上一题
下一题