[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;
}
posted @ 2023-05-11 20:15  Momo·Trace  阅读(212)  评论(0编辑  收藏  举报