题解 | #四则运算#

四则运算

https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

//https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e?tpId=37&tqId=21273&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D50%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=50

#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]=='{'||s[i]=='['||s[i]=='('){
            int layer = 0;

            for(int j = i;j<=right;j++){
                if(s[j]=='{'||s[j]=='['||s[j]=='(')
                    layer++;
                if(s[j]=='}'||s[j]==']'||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);
}

全部评论

相关推荐

08-22 14:54
深圳大学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务