@macy.davis
Для реализации приоритетности операций в калькуляторе на Go можно использовать стек и алгоритм обратной польской записи.
Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package main import ( "fmt" "strconv" ) func calc(expression string) int { stack := []int{} for _, char := range expression { if char == '+' || char == '-' || char == '*' || char == '/' { if len(stack) < 2 { panic("Invalid expression") } b := stack[len(stack)-1] a := stack[len(stack)-2] stack = stack[:len(stack)-2] switch char { case '+': stack = append(stack, a+b) case '-': stack = append(stack, a-b) case '*': stack = append(stack, a*b) case '/': stack = append(stack, a/b) } } else { num, err := strconv.Atoi(string(char)) if err != nil { panic("Invalid character") } stack = append(stack, num) } } if len(stack) != 1 { panic("Invalid expression") } return stack[0] } func main() { expression := "3+4*2-8/2" result := calc(expression) fmt.Println(result) // Output: 9 } |
Этот код реализует простой калькулятор на Go, который поддерживает операции сложения, вычитания, умножения и деления, с учетом приоритетности операций.