https://coderun.yandex.ru/problem/postfix-entry/description | Легкая |
---|
В постфиксной записи (или обратной польской записи) операция записывается после двух операндов. Например, сумма двух чисел A и B записывается как A B +. Запись B C + D * обозначает привычное нам (B + C) * D, а запись A B C + D * + означает A + (B + C) * D. Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения.
Ввод:
8 9 + 1 7 - *Вывод:
-102
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.Stack
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Считываем выражение в постфиксной записи и разбиваем на токены
val tokens = reader.readLine().trim().split(" ")
val stack = Stack<Int>()
for (token in tokens) {
when (token) {
// Если токен - оператор, выполняем операцию над двумя последними элементами стека
"+", "-", "*" -> {
val b = stack.pop()
val a = stack.pop()
stack.push(
when (token) {
"+" -> a + b
"-" -> a - b
else -> a * b
}
)
}
// Если токен - число, добавляем его в стек
else -> stack.push(token.toInt())
}
}
// Выводим результат вычисления
writer.write(stack.pop().toString())
reader.close()
writer.close()
}