记录编号 325243 评测结果 AAAAAAAAAA
题目名称 [NOIP 2013PJ]表达式求值 最终得分 100
用户昵称 GravatarRapiz 是否通过 通过
代码语言 C++ 运行时间 0.051 s
提交时间 2016-10-19 11:22:34 内存使用 7.88 MiB
显示代码纯文本
#include<cstdio> 
#include<stack>
#include<cstring>
#define file(x) "expr2013."#x
const int L=1e4,MAXN=1e7;
using std::stack;
stack<int> ns;
stack<char> os;
char buf[MAXN];
int n;
int main(){
	freopen(file(in),"r",stdin);
	freopen(file(out),"w",stdout);
	scanf("%s",buf+1);
	n=strlen(buf+1);
	for(int i=1;i<=n;i++){
		if(buf[i]=='+'){
			while(!os.empty()&&(os.top()=='*'||os.top()=='+')){
				int a=ns.top();ns.pop();
				int b=ns.top();ns.pop();
				if(os.top()=='*') ns.push(a*b%L);
				else ns.push((a+b)%L);
				os.pop();
			}
			os.push(buf[i]);
		}
		else if(buf[i]=='*'){
			while(!os.empty()&&os.top()=='*'){
				int a=ns.top();ns.pop();
				int b=ns.top();ns.pop();
				ns.push(a*b%L);
				os.pop();
			}
			os.push(buf[i]);
		}
		else{
			int a=buf[i]-'0';
			while(i+1<=n&&buf[i+1]>='0'&&buf[i+1]<='9') a=(a<<3)+(a<<1)+buf[++i]-'0';
			ns.push(a%L);
		}
	}
	while(!os.empty()){
		int a=ns.top();ns.pop();
		int b=ns.top();ns.pop();
		if(os.top()=='*') ns.push(a*b%L);
		else ns.push((a+b)%L);
		os.pop();
	}
	printf("%d",ns.top());
}