【HDU】1237 简单计算器 (stack)

http://acm.hdu.edu.cn/showproblem.php?pid=1237

题目很好理解,一开始想用优先队列,但好像有点难实现,用stack比较好实现,遇到“ * ” 或者" / " 就进行操作,遇到“ - ” 就把它的相反数加进stack,最后stack不为空的话,就全部按照加法加进来

/*
stack 的应用 
*/

#include 
#include 
#include 
#include 

using namespace std;

int main ()
{
	char ch,chh[3];
	double a;
	while(scanf("%lf%c",&a,&ch)!=EOF)
	{
		if(a==0 && ch=='\n')
			break;
		double ans=0;
		stack t;
		t.push(a);
		while(scanf("%s%lf",chh,&a)!=EOF)
		{
			if(strcmp(chh,"+")==0)
			{
				t.push(a);
			}
			else if(strcmp(chh,"-")==0)
			{
				t.push(-a);
			}
			else if(strcmp(chh,"*")==0)
			{
				double temp = t.top()*a;
				t.pop();
				t.push(temp);
			}
			else if(strcmp(chh,"/")==0)
			{
				double temp = t.top()/a;
				t.pop();
				t.push(temp);
			}
			char b = getchar();
			if(b=='\n')
				break;
		}
		while(t.empty()!=1)
		{
			ans += t.top();
			t.pop();
		}
		printf("%.2lf\n",ans);
	}
	return 0;
} 

 

你可能感兴趣的:(HDU)