计算器0.001

#include "iostream"
#include "stack"

using namespace std;

char ch;

char precede(char ch1,char ch2)
{
	if(ch2=='+'&&(ch1=='+'||ch1=='-'||ch1==')'||ch1=='*'||ch1=='/')) return '>';
	if(ch2=='+'&&(ch1=='('||ch1=='#')) return '<';
	if(ch2=='-'&&(ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1==')')) return '>';
	if(ch2=='-'&&(ch1=='('||ch1=='#')) return '<';
	if(ch2=='*'&&(ch1=='*'||ch1=='/'||ch1==')')) return '>';
	if(ch2=='*'&&(ch1=='+'||ch1=='-'||ch1=='('||ch1=='#')) return '<';
	if(ch2=='/'&&(ch1=='*'||ch1=='/'||ch1==')')) return '>';
	if(ch2=='/'&&(ch1=='+'||ch1=='-'||ch1=='('||ch1=='#')) return '<';
	if(ch2=='('&&(ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1=='#')) return '<';
	if(ch2==')'&&(ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1==')')) return '>';
	if(ch2==')'&&(ch1=='(')) return '=';
	if(ch2=='#'&&(ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1==')')) return '>';
	if(ch2=='#'&&(ch1=='#')) return '=';
}

int operate(int a,char cal,int b)
{
	if(cal=='+') return a+b;
	if(cal=='-') return a-b;
	if(cal=='*') return a*b;
	if(cal=='/') return a/b;
}

int calculate(stack<int> &num,stack<char> &oprate)
{
	char cal='0';
	int n2=0;
	int n1=0;
	while(ch!='#'||oprate.top()!='#')
	{
		if(ch>='0'&&ch<='9')
		{
			int n=ch-('0'-0);
			if(num.empty())
			{
				num.push(n);
			}
			else
			{
				int tnum=num.top();
				tnum*=10;
				num.pop();
				num.push(tnum+n);
			}
			cin>>ch;
		}

		else
		{
			switch(precede(oprate.top(),ch))
			{
				case '<':
					oprate.push(ch);
					if(ch!='(')
					{
						num.push(0);
					}
					cin>>ch;
					break;
				case '>':
					cal=oprate.top();
					oprate.pop();
					n2=num.top();
					num.pop();
					n1=num.top();
					num.pop();
					num.push(operate(n1,cal,n2));

					break;
				case '=':
					oprate.pop();
					cin>>ch;
					break;
			}
		}
	}
	return num.top();
}

int main(int argc, char const *argv[])
{
	stack<int> num;
	stack<char> oprate;
	cin>>ch;
	oprate.push(ch);
	cin>>ch;
	cout<<calculate(num,oprate)<<endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/csx0987/article/details/45194753