其他分享
首页 > 其他分享> > HDU 1237 简单计数器

HDU 1237 简单计数器

作者:互联网

HDU 1237 简单计数器

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237

题目分析以及方法:
用栈来写,将运算符与数字分别压入不同的栈,然后分别讨论不同情况,(这个题目相比栈的运算简单些,因为他的运算符只有"+,-,*,/")

代码实现:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stack>
#include<cctype>//isdigit(ch)判断一个字符是否是十进制数 
//简单计算器//栈的四则运算  OPTR 操作符,OPND 操作数 
using namespace std; 

int main()
{
	stack<double>OPND ;
    stack<char>OPTR;
	string a;
	double d1,d2;
	while(getline(cin,a)&&a !="0")
	{
		for(int i=0;a[i]; i++ )
		{
			if(isdigit(a[i]))
			{
				double  s=0;
				while(isdigit(a[i])) 
				{
					s=s*10+a[i]-'0';
					i++; 
				}
				i--;
				OPND.push(s);
		    }else if(a[i]=='+'||a[i]=='-')
		    {
		    	if(OPTR.empty())
		    	OPTR.push(a[i]);
		    	else
		    	{
		    		char ch;
		    		ch=OPTR.top();
		    		OPTR.pop();
		    		d1=OPND.top();
		    		OPND.pop();
		    		d2=OPND.top();
		    		OPND.pop();
		    		OPTR.push(a[i]);
		    		if(ch=='+')
		    		OPND.push(d1+d2);
		    		else
		    		OPND.push(d2-d1);
		    		
				}
			}else if(a[i]=='*'||a[i]=='/')
			{

				char ch =a[i]; 
				i+=2;//因为运算符和运算数之间有一个空格 
				d2 = 0; 
				 while(isdigit(a[i])) {
                d2 = d2 * 10 + a[i] - '0';
					i++; 
				}
				i--;
				d1=OPND.top();
				OPND.pop();
				if(ch=='*')
				OPND.push(d1*d2) ;
				else
				OPND.push(d1/d2) ;
				
			}
		}
		while(!OPTR.empty())
		{
		 	double d1,d2;
			char ch;
		    ch=OPTR.top();
		   	OPTR.pop();
	 		d1=OPND.top();
	 		OPND.pop();
		  	d2=OPND.top();
		   	OPND.pop();
		   	if(ch=='+')
		   	OPND.push(d1+d2);
		   	else
		   	OPND.push(d2-d1);
			
		}
		   printf("%.2f\n", OPND.top());
	}
	
 } 

标签:HDU,1237,OPND,计数器,ch,push,OPTR,d2,d1
来源: https://blog.csdn.net/m0_52262443/article/details/115532467