计算器(三)——加减和乘除和括号

2018-11-01  本文已影响0人  旺叔叔

抱歉 772这题是付费题被锁了,所以就假装我们在做题好了。

题目分析:用递归或者栈来解决括号优先级问题,用栈或者变量来解决加减乘除间优先级问题。此处先只写一种解法。

解法:

/**
 * 这算是1和2题的结合
 * 第一题教会我们解决括号优先级问题,可以递归或者栈
 * 第二题教会我们解决乘除优先级问题,一个变量
 * 1.递归解决括号优先级
 * 2.curRes解决加减乘除间的优先级
 */
public static int calculate(String s) {
    int n = s.length(), num = 0, curRes = 0, res = 0;
    char op = '+';
    for (int i = 0; i < n; ++i) {
        char c = s.charAt(i);
        if (c >= '0') {
            num = num * 10 + c - '0';
        } else if (c == '(') {
            int j = i, cnt = 0;
            for (; i < n; ++i) {
                if (s.charAt(i) == '(') ++cnt;
                if (s.charAt(i) == ')') --cnt;
                if (cnt == 0) break;
            }
            num = calculate(s.substring(j + 1, i));
        }
        if (c == '+' || c == '-' || c == '*' || c == '/' || i == n - 1) {
            switch (op) {
                case '+': curRes += num; break;
                case '-': curRes -= num; break;
                case '*': curRes *= num; break;
                case '/': curRes /= num; break;
            }
            if (c == '+' || c == '-' || i == n - 1) {
                res += curRes;
                curRes = 0;
            }
            op = c;
            num = 0;
        }
    }
    return res;
}
上一篇 下一篇

猜你喜欢

热点阅读