美文网首页
计算器(三)——加减和乘除和括号

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

作者: 旺叔叔 | 来源:发表于2018-11-01 18:15 被阅读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;
    }

    相关文章

      网友评论

          本文标题:计算器(三)——加减和乘除和括号

          本文链接:https://www.haomeiwen.com/subject/ghaxxqtx.html