#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;
}
计算器0.001
猜你喜欢
转载自blog.csdn.net/csx0987/article/details/45194753
今日推荐
周排行