import java.util.*;

/**
 * NC240 计算器(一)
 * @author d3y1
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串 
     * @return int整型
     */
    public int calculate (String s) {
        return solution(s);
    }

    /**
     * 递归: 栈
     * @param mathStr
     * @return
     */
    private static int solution(String mathStr) {
        Stack<Integer> stack = new Stack<>();
        int len = mathStr.length();
        char[] chars = mathStr.toCharArray();
        // 初始化符号为'+'
        char sign = '+';
        // 记录数字
        int number = 0;
        for (int i = 0; i < len; i++) {
            char aChar = chars[i];
            // 1 当前字符是数字 拼数字
            if (Character.isDigit(aChar)) {
                number = number * 10 + aChar - '0';
            }

            // 2 当前字符是小括号
            if (aChar == '(') {
                // 移到小括号后一位字符
                int j = i + 1;
                // 统计小括号的数量
                int count = 1;
                while (count > 0) {
                    // 遇到右括号 括号数-1
                    if (chars[j] == ')') {
                        count--;
                    }
                    // 遇到左括号 括号数+1
                    if (chars[j] == '(') {
                        count++;
                    }
                    j++;
                }
                // 递归 解小括号中的表达式
                number = solution(mathStr.substring(i + 1, j - 1));
                i = j - 1;
            }

            // 3 当前字符是运算符号 将数字处理后放进栈
            if (!Character.isDigit(aChar) || i == len - 1) {
                // '+' 直接入栈
                if (sign == '+') {
                    stack.push(number);
                }
                // '-' 数字取反数再入栈
                else if (sign == '-') {
                    stack.push(-1 * number);
                }
                // // '*' 弹出一个数字相乘后再放入栈
                // else if (sign == '*') {
                //     stack.push(stack.pop() * number);
                // }
                // // '/' 弹出一个数字相除后再放入栈
                // else if (sign == '/') {
                //     stack.push(stack.pop() / number);
                // }
                // 更新符号
                sign = aChar;
                // 刷新数字
                number = 0;
            }
        }
        // 栈中数字求和得到结果
        int ans = 0;
        while (!stack.isEmpty()) {
            ans += stack.pop();
        }
        return ans;
    }
}