package main
// 原文大佬:https://www.nowcoder.com/profile/4797221
import (
"strings"
)

func solve(s string) int {
// 括号用递归处理
// 加减乘除由于乘除优先级更高的特性,所以采用临时数组保存加减因子,加减因子上附加的乘除运算先进行
// 最后统计临时数组的所有加减因子之和

// 声明一个存放临时数据的数组
its := make([]int, 0)
// 下一个待入数组的数据的运算符,第一个为“+”
var operator byte = '+'
// 运算数字因子
tempNum := 0
// 字符串转数组
chars := []byte(s)
l := 0
for i := 0; i < len(chars); i++ {
    c := chars[i]
    // 0~9 字符是数字
    if c >= '0' && c <= '9' {
        tempNum = 10*tempNum + int(c-'0')
    }
    if '(' == c {
        l++
        start, end := i+1, i+1
        for l != 0 {
            if chars[end] == ')' {
                l--
            }
            if chars[end] == '(' {
                l++
            }
            end++
        }
        i = end - 1
        tempNum = solve(s[start:end])
    }
    if strings.Contains("+-*/", string(c)) || i == len(chars)-1 {
        switch operator {
        case '+':
            its = append(its, tempNum)
        case '-':
            its = append(its, -tempNum)
        case '*':
            its[len(its)-1] *= tempNum
        case '/':
            its[len(its)-1] /= tempNum
        }
        tempNum = 0
        operator = c
    }
}
result := 0
for _, el := range its {
    result += el
}
return result

}