记录编号 |
332077 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2013PJ]表达式求值 |
最终得分 |
100 |
用户昵称 |
ciyou |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.164 s |
提交时间 |
2016-10-28 14:51:57 |
内存使用 |
0.28 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
stack<int> proc;
stack<int> temp;
int state=0;
//1-Multiply 2-Add 0-Normal
int readch(char&);
int main(){
freopen("expr2013.in","r",stdin);
freopen("expr2013.out","w",stdout);
char tem;
int mark;
while((mark=readch(tem))!=-1){
if(mark==0){
int now;
if(!temp.empty()){
now=temp.top();
temp.pop();
}
else now=0;
now=(now*10)%10000+int(tem-'0');
temp.push(now);
}else if(mark==1){
if(state==1){
int x,y;
x=proc.top();
proc.pop();
y=temp.top();
temp.pop();
int res=(x*y)%10000;
proc.push(res);
state=0;
}else{
proc.push(temp.top());
temp.pop();
}
}else if(mark==2){
if(state==1){
int x,y;
x=proc.top();
proc.pop();
y=temp.top();
temp.pop();
int res=(x*y)%10000;
proc.push(res);
}else{
state=1;
proc.push(temp.top());
temp.pop();
}
}
}
if(state==1){
int x,y;
x=proc.top();
proc.pop();
y=temp.top();
temp.pop();
int res=(x*y)%10000;
proc.push(res);
state=0;
}else{
proc.push(temp.top());
temp.pop();
}
int ans=0;
while(!proc.empty()){
ans+=proc.top();
ans%=10000;
proc.pop();
}
cout<<ans;
fclose(stdin);
fclose(stdout);
return 0;
}
int readch(char& aim){
char temp;
scanf("%c",&temp);
if((temp>='0'&&temp<='9')){
aim=temp;
return 0;
}
if(temp=='+'){
aim=temp;
return 1;
}
if(temp=='*'){
aim=temp;
return 2;
}
else return -1;
}