题解 | #四则运算#

四则运算

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

  1. 题目有三种括号,其实看成一种即可,因为不同括号是给人看的,把它们都想成圆括号即可
  2. 每一个括号的操作都是一样的操作,也就是每遇到括号就会递归
  3. 每递归一次,就会蜕去外层括号
  4. 使用vector模拟栈,就可以省去入栈、出栈,返回栈的和即可
  5. 使用两个指针,这样避免拷贝,或者是C语言的二级指针
#include <bits/stdc++.h>
using namespace std;

int calulate(string& s, int start, int end) {
    vector<int> sta;
    char sign = '+';
    int n = s.size();
    int number = 0;

    for (int i = start; i <= end; ++i) {
//         if (s[i] == ' ')    continue;    /**<忽略空格 */
        if (isdigit(s[i]))
            number = 10*number + (s[i]-'0');

        /**<三组括号视为同一种情况,匹配对应的括号位置,同时剔除外层括号 */
        if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
            int level = 0;
            int j = i;
            for (; j <= end; ++j) {
                if (s[j] == '(' || s[j] == '[' || s[j] == '{')    ++level;
                else if (s[j] == ')' || s[j] == ']' || s[j] == '}') {
                    if (--level == 0)
                        break;
                }
            }
            number = calulate(s, i+1, j-1);    /**<同时剔除外层括号 */
            i = j + 1;
        }

        if (!isdigit(s[i]) || i==end) {
            switch (sign) {
                case '+':
                    sta.push_back(number);
                    break;
                case '-':
                    sta.push_back(-number);
                    break;
                case '*':
                    sta.back() *= number;
                    break;
                case '/':
                    sta.back() /= number;
                    break;
            }
            sign = s[i];
            number = 0;
        }
    }
    return accumulate(sta.begin(), sta.end(), 0);
}


int main(int argc, char *argv[])
{
    cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);

    /**<题目不考虑空格 */
    string s;
    while(cin >> s) {
       cout << calulate(s, 0, s.size()-1) << '\n';
    }

    return 0;
}
全部评论
思路清晰呀
点赞 回复 分享
发布于 2021-08-18 16:30

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
3
1
分享
牛客网
牛客企业服务