Войти Регистрация
Алгоритмы

154. Калькулятор в поле суммы перевода

Сложная

В поле суммы перевода можно ввести выражение, например 1500 - (200 + 50) * 2. Дана строка expr: целые неотрицательные числа, +, -, *, /, скобки и пробелы.

Минус бывает унарным, но только в начале выражения или сразу после (: -5 + 3, 2 * (-4 + 1). Деление целочисленное, дробная часть отбрасывается к нулю: -7 / 2 = -3. Деления на ноль во входе нет.

Приоритет обычный: сначала скобки, потом * и / слева направо, потом + и -. Верните значение выражения. eval и его аналоги не использовать.

В работе: Поле суммы в приложении Т‑Банка: клиент делит счёт в ресторане на месте, не выходя в калькулятор.

Пример 1

Ввод
expr = "1500 - (200 + 50) * 2"
Вывод
1000

Скобка 250, умножение 500, итог 1000.

Пример 2

Ввод
expr = "-7 / 2 + (-(3))"
Вывод
-6

−7 / 2 = −3 (к нулю), плюс −3. Итог −6.

Ограничения

  • 1 ≤ длина expr ≤ 10⁵
  • Глубина скобок до 10⁴
  • Промежуточные значения по модулю ≤ 10¹⁵
  • Лимит — 3 с на тест (3000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def eval_amount(expr):
СтекРазбор выраженийСтрокицельO(n)

Источник: наша задача на данных Т-Банка. Условие пересказано своими словами.