题解 | #四则运算#

四则运算

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

#include <iostream>
#include <list>
#include <stack>
#include <string>
using namespace std;
int i = 0;//一定要设为全局变量,因为有迭代
int GetRes(string str) {
    list<int> digit_st;
    char op = '+';
    int num = 0;
    while ( i < str.size()) {
        while (str[i] >= '0' && str[i] <= '9' && i < str.size()) {
            num = num * 10 + (str[i] - '0');
            i++;
        }
        if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
            i++;
            num = GetRes(str);
        }

        switch (op) {
            case '+':
                digit_st.push_back(num);
                break;
            case '-':
                digit_st.push_back(-num);
                break;
            case '*':
                digit_st.back() *=  num;
                break;
            case '/':
                digit_st.back() /=  num;
                break;
        }
        num = 0;
        op = str[i];
        if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
            i++;
            break;
        }
        i++;
    }
    int ans = 0;
    while (digit_st.size()) {
        ans += digit_st.back();
        digit_st.pop_back();
    }
    return ans;
}
int main() {
    string str;
    while (cin >> str) {
        int res = GetRes(str);
        cout << res << endl;
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务