题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d
package main
import (
"fmt"
"strconv"
)
var pos int
func main() {
var s string
fmt.Scan(&s)
num := cal(s, len(s))
fmt.Print(num)
}
func cal(s string, length int) int {
var flag = '+'
var stack []int
var sum = 0
var num = 0
for pos < length {
if s[pos] == '{' || s[pos] == '[' || s[pos] == '(' {
pos++
num = cal(s, length)
}
for pos < length && s[pos] >= '0' && s[pos] <= '9' {
a, _ := strconv.Atoi(string(s[pos]))
num = num*10 + a
pos++
}
switch flag {
case '+':
stack = append(stack, num)
case '-':
stack = append(stack, -num)
case '*':
stack[len(stack)-1] = stack[len(stack)-1] * num
case '/':
stack[len(stack)-1] = stack[len(stack)-1] / num
}
num = 0
if pos < length {
flag = rune(s[pos])
if flag == '}' || flag == ']' || flag == ')' {
pos++
break
}
}
pos++
}
for i := 0; i < len(stack); i++ {
sum += stack[i]
}
return sum
}
