#C07L09P04. C07.L09.STL之栈.引例2.表达式求值(noip2013普及)

C07.L09.STL之栈.引例2.表达式求值(noip2013普及)

题目描述

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

输入格式

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “*” ,且没有括号,所有参与运算的数字均为 0 到 2^31 -1 之间的整数。输入数据保证这一行只有 0~ 9、+、*这 2 种字符。

数据范围

对于 30% 的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100;

对于 80%的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 1000;

对于 100%的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100000。

输出格式

输出只有一行,包含一个整数,表示这个表达式的值。 注意: 当答案长度多于 4 位 时,请只输出最后 4 位 , 前导 0 不输出。

样例

1+1*3+4
8
1+1234567890*1
7891
1+1000000003*1
4

样例解释

样例 1 计算的结果为 8,直接输出 8。

样例 2 计算的结果为 1234567891,输出后 4 位,即 7891。

样例 3 计算的结果为 1000000004,输出后 4 位,即 4。

程序填空

#include<bits/stdc++.h>
using namespace std;
stack <int> s;
int main()
{
	char c;
	int num,ans=0;

	cin>>num;
	num = num % 10000;
	填空(1) 

	while(cin>>c>>num)
	{
		if(c=='*')
		{
			num = 1ll* 填空(2) *num%10000;
			填空(3) ;
		}
		else
			num = num%10000;
		
		填空(4) ;
	}
	
	while(!s.empty())
	{
		ans += 填空(5) ;
		ans = ans%10000;
		填空(6) ;
	}

	printf("%d",ans);
	return 0;
}

填空(1) {{ input(1) }}

填空(2) {{ input(2) }}

填空(3) {{ input(3) }}

填空(4) {{ input(4) }}

填空(5) {{ input(5) }}

填空(6) {{ input(6) }}