后缀表达式全忘了,看了看题解,注释瞎写写,这题就过了

package main

import(
    "fmt"
    "bufio"
    "os"
    "strconv"
)

var r *bufio.Scanner

//     符号栈
var sign []byte
// 数字栈
var res []int

// 比较优先级
func priorCompare(c byte, top byte) bool {
//     字符串末尾也要踢掉符号栈,因为肯定有一个符号留到最后,是最后一步
    if c == '\n'{
        return false
    }
    if c == '*' {
        if top=='*' {
            return false
        }else{
            return true
        }
//         加减必须出栈一个
    }else{
        return false
    }
}

// 计算结果
func getValue(a, b int, sign byte) int {
    if sign == '*'{
        return b*a
    }else if sign == '+'{
        return b+a
    }else{
        return b-a
    }
}

func getRevPoland(s string) {
//     字符组成数字
    digits := []byte{}
    for i:=0; i<len(s); i++{
        c:=s[i]
        if '0' <= c && c <= '9'{
            digits = append(digits, c)
        }else{
            num,_ := strconv.Atoi(string(digits))
            res = append(res, num)
            digits = []byte{}

//             fmt.Println(res, sign, len(sign)!= 0 && !priorCompare(c, sign[len(sign)-1]))
//             遇到符号,数字栈取出两个数,用当前符号运算
//             条件是:符号栈不空且当前符号的可以踢掉符号栈的栈顶符号
            for len(sign)!= 0 && !priorCompare(c, sign[len(sign)-1]){
//                 出栈两个数
                nums1:=res[len(res)-1]
                res= res[:len(res)-1]
                nums2:=res[len(res)-1]
                res= res[:len(res)-1]
//                 fmt.Printf("当前运算数字和符号%v%c%v\n",nums1,byte(sign[len(sign)-1]), nums2)
// //                 两个数和符号栈顶的符号的运算结果加入数字栈
                res = append(res, getValue(nums1, nums2, sign[len(sign)-1]))
                sign = sign[:len(sign)-1]
            }
            sign = append(sign, c)
        }
    }
}

func main() {
    r := bufio.NewScanner(os.Stdin)
    for r.Scan(){
        sign = []byte{}
        res = []int{}
        if r.Text() == "END" {
            break
        }
//         fmt.Println(r.Text()+"\n")
        getRevPoland(r.Text()+"\n")
        //最后数字栈剩下的为结果
        fmt.Println(res[0])
    }
}