112 • 2年前
//设“+”级别为2,“*”级别为1.开一个字符栈与一个数字栈。 //遇到运算符,就把之前优先级小或相等的pop出去计算
using namespace std; stack Snum,Operator; void POP(int num) {
int n1,n2,opt;
while(!Operator.empty()&&Operator.top()<=num)
{
opt=Operator.top();//获取操作符
Operator.pop();//在获取操作符后弹出
n1=Snum.top();//从数字栈顶取一个数
Snum.pop();//弹出
n2=Snum.top();//再取一个数
Snum.pop();//弹出
if(opt==2)//判断运算符为“*”还是“+”
Snum.push((n1+n2)%10000);
else
Snum.push((n1*n2)%10000);
}
} int main() { int num=0; char ch; while(cin>>ch) { if(ch=='+') { Snum.push(num);//将之前旳数入栈 POP(2);//优先级《=2计算 Operator.push(2); num=0;
}
else if(ch=='*')
{
Snum.push(num);//同上
POP(1);
Operator.push(1);
num=0;
}
else
num=(num*10+ch-'0')%10000;
}
Snum.push(num);
POP(3);
cout<<Snum.top()<<endl;
return 0;
}
评论: