[NOIP2013 普及组] 表达式求值
[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\)。
Code
#include <bits/stdc++.h>
using namespace std;
stack <int> x;
int main()
{
int a,b;
char c;
cin >> a;
int m=10000;
a=a%m;
x.push(a);
while(cin>>c>>b)
{
if(c=='*')
{
a=x.top();
x.pop();
x.push(a*b%m);
}
else x.push(b);
}
a=0;
while(x.size())
{
a+=x.top();
a%=m;
x.pop();
}
cout<<a<<endl;
return 0;
}
本文来自小默的博客,转载请注明原文链接:https://www.cnblogs.com/momotrace/p/p1981.html