题解 | #表达式求值#

表达式求值

https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d

//https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=&judgeStatus=&tags=&title=54&gioEnter=menu

#include <iostream>
#include <vector>

using namespace std;

int computer(string s, int left, int right){
    char op = '+';
    int num = 0;
    int res = 0;
    vector<int> opn;

    for(int i = left;i<=right;i++){
    if(isdigit(s[i]))
        num = num*10+s[i]-'0';   //注意字符与数字的转换

    if(s[i]=='('){
        int layer = 0;

        for(int j = i;j<=right;j++){
            if(s[j]=='(')
                layer++;
            if(s[j]==')'){
                layer--;
                if(layer==0){
                    num = computer(s, i+1, j-1);
                    i = j;
                    break;
                }
            }
        }

    }
    if(!isdigit(s[i])||i==right){
        switch(op){
        case '+' :
            opn.push_back(num);
            break;
        case '-' :
            opn.push_back(-num);
            break;
        case '*' :
            opn.back()*=num;
            break;
        case '/' :
            opn.back()/=num;
            break;
        }
        op = s[i];
        num = 0;
    }





}

    for(const int &ans:opn)
        res+=ans;

    return res;
}

int main() {
    string s;

    while(cin >> s)
        cout << computer(s, 0, s.size()-1);
}

全部评论

相关推荐

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