测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题