#130Средне
Вычисление выражения со скобками
Время: 1 s · Память: 256 MB
- Рекурсия
Условие
Формула определяется так:
- одна цифра (
0–9) — формула; - если и — формулы, то
(A+B),(A-B)и(A*B)— тоже формулы.
Например, (2+(3*4)) и ((9-7)*(1-6)) — формулы. Вычислите значение данной формулы.
Формат ввода
В одной строке — формула без пробелов длиной до . Все промежуточные результаты по модулю не превосходят .
Формат вывода
Одно целое число — значение формулы.
Примеры
Ввод
(2+(3*4))
Вывод
14
Ввод
((9-7)*(1-6))
Вывод
-10
Примечание
Определение формулы рекурсивно — и вычисление тоже рекурсивное. Функция читает одну формулу начиная с текущего символа: если это цифра — возвращает её; если ( — читает левую формулу (вызывая себя), знак, правую формулу, пропускает ) и возвращает результат. Текущую позицию удобно хранить в глобальной переменной.
Второй пример: . Нужен 64-битный тип.
