算法训练 表达式计算
程序员文章站
2022-06-26 08:34:39
...
问题描述
输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
输入格式
输入一行,包含一个表达式。
输出格式
输出这个表达式的值。
样例输入
1-2+3*(4-5)
样例输出
-4
数据规模和约定
表达式长度不超过100,表达式运算合法且运算过程都在int内进行。
#include<bits/stdc++.h>
using namespace std;
stack<int>m;
stack<char>s;
void deal(char c)
{
int num1,num2;
if(c=='+'||c=='-'||c==')')
{
while(s.top()!='(')
{
num1=m.top();
m.pop();
num2=m.top();
m.pop();
switch(s.top())
{
case '+':
num2+=num1;
break;
case '-':
num2-=num1;
break;
case '*':
num2*=num1;
break;
case '/':
num2/=num1;
break;
}
m.push(num2);
s.pop();
}
s.push(c);
}
else if(c=='*'||c=='/')
{
while(s.top()=='*'||s.top()=='/')
{
num1=m.top();
m.pop();
num2=m.top();
m.pop();
switch(s.top())
{
case '*':
num2*=num1;
break;
case '/':
num2/=num1;
break;
}
m.push(num2);
s.pop();
}s.push(c);
}
else if(c=='(')
{
s.push(c);
}
}
int main()
{
string str;
cin>>str;
char number[101];
int len=0;
str+=")";
s.push('(');
for(int i=0; str[i]; i++)
{
if(str[i]>='0'&&str[i]<='9')
{
number[len++]=str[i];
continue;
}
number[len]='\0';
if(number[0]!='\0')
{
m.push(atoi(number));
number[0]='\0';
len=0;
}
deal(str[i]);
if(str[i]==')')
{
s.pop();
s.pop();
}
}
cout<<m.top()<<endl;
}