题解--BY镇元子

112  •  2年前


//设“+”级别为2,“*”级别为1.开一个字符栈与一个数字栈。 //遇到运算符,就把之前优先级小或相等的pop出去计算

include<bits/stdc++.h>

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;

}


Comments:

自己给自己捉个虫:Operator.push(2);//优先级<=2的控制符进行运算。:)


112  •  2年前

这个题解写得不太严谨,欢迎大家来捉虫 :)


112  •  2年前

代码是没啥问题的,就是可以用Markdown让代码更好去看一点。


ZZQ  •  2年前

good


陈柏诚  •  2年前