Калькулятор с приоритетами и понятными ошибками
Задача по программированию с проверкой онлайн
- Сложность
- Сложная
- Языки
- Python
- JavaScript
- TypeScript
- Java
- Go
- Темы
- Разбор и проверка данных
- Исключения
- Математика
Вычислите целочисленное выражение expr (до 200 символов). В нём бывают неотрицательные целые числа (подряд идущие цифры, ведущие нули допустимы), операции +, -, *, /, %, ^, круглые скобки и пробелы; пробелы между лексемами игнорируются, но два числа подряд (1 2) — ошибка.
Приоритеты, от слабого к сильному:
+и-— слева направо;*,/,%— слева направо;- унарный минус (может повторяться:
--5=5); ^— справа налево, его правый операнд может начинаться с унарного минуса: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