#include <iostream>
#include <stack>
using namespace std;
stack<char> s1;//存放未加入到后缀式的运算符
stack<int> s4;// 计算结果
//运算规则
//①当运算符是(则入栈
//②当时')'时 运算符出栈直到遇到左括号,左括号也出栈,括号不加入后缀式。
//③当遇到除 括号外的其他运算符,当其优先级高于除'('以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,
//直到一个比它优先级低的或者遇到了一个左括号为止。
int main()
{
string s2;// 输入的整个表达式
string s3;//表达式的后缀式
int x=0,y=0;
int ok;
cin>>s2;
for(int i=0;i<s2.size();++i)
{
ok=1;
while(s2[i]>='0'&&s2[i]<='9'&&i<s2.size())
{
//sscanf sprintf
//x=x*10+s2[i]-'0';
s3.push_back(s2[i]);
++i;
ok=0;
}
if(ok==0)
{
s3.push_back(' ');
}
if(i!=s2.size())
{
if(s2[i]=='(')
{
s1.push(s2[i]);
}
else if(s2[i]==')')
{
while(s1.top()!='(')
{
s3.push_back(s1.top());
s1.pop();
}
s1.pop();
}
else if(s2[i]=='*'||s2[i]=='/')
{
while(s1.size()!=0&&(s1.top()=='*'||s1.top()=='/'))
{
s3.push_back(s1.top());
s1.pop();
}
s1.push(s2[i]);
}
else//但是+或者-时
{
while(s1.size()!=0&&s1.top()!='(')
{
s3.push_back(s1.top());
s1.pop();
}
s1.push(s2[i]);
}
}
}
while(s1.size()!=0)
{
s3.push_back(s1.top());
s1.pop();
}
cout<<s3<<endl;
for(int i=0;i<s3.size();++i)
{
if(s3[i]>='0'&&s3[i]<='9')
{
x=0;
while(s3[i]!=' ')
{
x=x*10+s3[i]-'0';
++i;
}
s4.push(x);
}
else
{
switch(s3[i])
{
case '+':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(x+y);
break;
case '-':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(y-x);
break;
case '*':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(x*y);
break;
case '/':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(y/x);
break;
default:
break;
}
}
}
cout<<s4.top();
return 0;
}
#include <stack>
using namespace std;
stack<char> s1;//存放未加入到后缀式的运算符
stack<int> s4;// 计算结果
//运算规则
//①当运算符是(则入栈
//②当时')'时 运算符出栈直到遇到左括号,左括号也出栈,括号不加入后缀式。
//③当遇到除 括号外的其他运算符,当其优先级高于除'('以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,
//直到一个比它优先级低的或者遇到了一个左括号为止。
int main()
{
string s2;// 输入的整个表达式
string s3;//表达式的后缀式
int x=0,y=0;
int ok;
cin>>s2;
for(int i=0;i<s2.size();++i)
{
ok=1;
while(s2[i]>='0'&&s2[i]<='9'&&i<s2.size())
{
//sscanf sprintf
//x=x*10+s2[i]-'0';
s3.push_back(s2[i]);
++i;
ok=0;
}
if(ok==0)
{
s3.push_back(' ');
}
if(i!=s2.size())
{
if(s2[i]=='(')
{
s1.push(s2[i]);
}
else if(s2[i]==')')
{
while(s1.top()!='(')
{
s3.push_back(s1.top());
s1.pop();
}
s1.pop();
}
else if(s2[i]=='*'||s2[i]=='/')
{
while(s1.size()!=0&&(s1.top()=='*'||s1.top()=='/'))
{
s3.push_back(s1.top());
s1.pop();
}
s1.push(s2[i]);
}
else//但是+或者-时
{
while(s1.size()!=0&&s1.top()!='(')
{
s3.push_back(s1.top());
s1.pop();
}
s1.push(s2[i]);
}
}
}
while(s1.size()!=0)
{
s3.push_back(s1.top());
s1.pop();
}
cout<<s3<<endl;
for(int i=0;i<s3.size();++i)
{
if(s3[i]>='0'&&s3[i]<='9')
{
x=0;
while(s3[i]!=' ')
{
x=x*10+s3[i]-'0';
++i;
}
s4.push(x);
}
else
{
switch(s3[i])
{
case '+':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(x+y);
break;
case '-':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(y-x);
break;
case '*':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(x*y);
break;
case '/':
x=s4.top();
s4.pop();
y=s4.top();
s4.pop();
s4.push(y/x);
break;
default:
break;
}
}
}
cout<<s4.top();
return 0;
}