表达式求值

大半年没写题了,当初训练的时候怀着雄心壮志,后来基地给拆,哎

  • 题目描述:就是计算3*3-1这种表达式的值
  • 数据范围 :int
  • 解题步骤:注意连个点:
    判断优先级,这里是*大于等于/ 大于 + 大于等于 -,优先级相等或则大的先算
    将123这种连着的字符变成数字

ac代码:

#include<iostream>
#include<stack>
#include<string>
#include<map>
#include<cctype>
#include<cstdlib>
#include<cstdio>
using namespace std;
stack<int>equa_int;
stack<char>equa_char;
string s;
void solve(char ch){
    map<char,int>ma;
    ma['-']=1,ma['+']=1,ma['/']=2,ma['*']=2,ma['(']=0,ma[')']=0;
    while(equa_int.size()>1&&ma[ch]<=ma[equa_char.top()]){//ch=='('不加入判断
        char c=equa_char.top();
        equa_char.pop();
        if(c=='('){
            if(ch==')')return ;
            else {
                equa_char.push('(');
                return ;
            }    
        }
        else {
            int b=equa_int.top();
            equa_int.pop();
            int a=equa_int.top();
            equa_int.pop();
            int result=0;
            switch(c){
                case '+':result=a+b;break;
                case '-':result=a-b;break;
                case '*':result=a*b;break;
                case '/':result=a/b;break;
            }
            equa_int.push(result);
        }    
    }
}
int main(){
    //freopen("io.txt","r",stdin);
    //freopen("io.txt","a+",stdout);
    cin>>s;
    //cout<<"@"<<endl;
    int flag=0;
    for(int i=0;i<s.length();i++){
        if(isdigit(s[i])){
            int x=s[i]-'0';
            if(flag){
                int tem=equa_int.top();
                equa_int.pop();
                x=tem*10+x;
            }
            equa_int.push(x);
            flag=1;
        }    
        else {
            if(s[i]=='(')    
                equa_char.push(s[i]);
            else {
                solve(s[i]);
                if(s[i]!=')')
                    equa_char.push(s[i]);
            }
            flag=0;
        }
        //if(equa_int.size()!=0)cout<<equa_int.top()<<' ';
        //cout<<i<<' '<<equa_int.size()<<' '<<equa_char.size()<<endl;
    }
    solve('-');
    cout<<equa_int.top()<<endl;
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务