Калькулятор с приоритетами и понятными ошибками

Задача по программированию с проверкой онлайн

Сложность
Сложная
Языки
Python
JavaScript
TypeScript
Java
Go
Темы
Разбор и проверка данных
Исключения
Математика

Вычислите целочисленное выражение expr (до 200 символов). В нём бывают неотрицательные целые числа (подряд идущие цифры, ведущие нули допустимы), операции +, -, *, /, %, ^, круглые скобки и пробелы; пробелы между лексемами игнорируются, но два числа подряд (1 2) — ошибка.

Приоритеты, от слабого к сильному:

  1. + и - — слева направо;
  2. *, /, % — слева направо;
  3. унарный минус (может повторяться: --5 = 5);
  4. ^ — справа налево, его правый операнд может начинаться с унарного минуса: 2 ^ 3 ^ 2 = 2 ^ 9, а -2 ^ 2 = -(2 ^ 2) = -4.

/ — деление с отбрасыванием дробной части к нулю (7 / -2 = -3), % — остаток со знаком делимого (-7 % 3 = -1), 0 ^ 0 = 1. Унарного плюса нет. Гарантируется, что у корректного выражения все промежуточные результаты по модулю меньше 2^53.

Сообщите об ошибке: бросьте исключение, в Go верните error, если выражение пустое, содержит другой символ, нарушает грамматику (пропущен операнд, лишняя или незакрытая скобка, пустые скобки, лишние лексемы в конце), а также при делении или остатке от деления на ноль и при отрицательном показателе степени.

Пример: "2 * -3 ^ 2" → -18.


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки