记录编号 382939 评测结果 AAAAAAAAAA
题目名称 [NOIP 2013PJ]表达式求值 最终得分 100
用户昵称 GravatarEmine 是否通过 通过
代码语言 C++ 运行时间 0.022 s
提交时间 2017-03-14 20:51:12 内存使用 9.85 MiB
显示代码纯文本
#include<cstdio> 
#include<stack>
#include<cstring>
const int L=10000,MAXN=10000001;
using namespace std;
stack<int> ns;
stack<char> os;
char buf[MAXN];
int n;
int main(){
	freopen("expr2013.in","r",stdin);
	freopen("expr2013.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());
}