描述
给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。
数据范围:运算过程中和最终结果均满足 ∣val∣≤231−1,即只进行整型运算,确保输入的表达式合法
输入描述:
输入算术表达式
输出描述:
计算出结果值
示例1
输入:
400+5
输出:
405
代码
#include<iostream>
#include<string>
#include<stack>
using namespace std;
void compute(stack<int>&st1,stack<char>&st2){
int b=st1.top();
st1.pop();
int a=st1.top();
st1.pop();
char op=st2.top();
st2.pop();
if(op=='+')a=a+b;
else if(op=='-')a=a-b;
else if(op=='*')a=a*b;
else if(op=='/')a=a/b;
st1.push(a);
}
bool priority(char m,char n){
if(m=='(')return false;
else if((m=='+'||m=='-')&&(n=='*'||n=='/'))return false;
return true;
}
int main(){
string s;
while(cin>>s){
stack<int>st1;
stack<char>st2;
st2.push('(');
s+=')';
bool flag=false;
for(int i=0;i<s.length();i++){
if(s[i]=='(')st2.push('(');
else if(s[i]==')'){
while(st2.top()!='('){
compute(st1,st2);
}
st2.pop();
}
else if(flag){
while(priority(st2.top(),s[i]))compute(st1,st2);
st2.push(s[i]);
flag=false;
}
else{
int j=i;
if(s[j]=='-'||s[j]=='+')i++;
while(isdigit(s[i])){
i++;
}
string tmp=s.substr(j,i-j);
st1.push(stoi(tmp));
i--;
flag=true;
}
}
cout<<st1.top()<<endl;
}
return 0;
}