Скажи, у меня есть выражение:
9 * 8 + 1 - 4
Это выражение может интерпретироваться шестью различными способами, в зависимости от приоритета оператора:
(((9 * 8) + 1) - 4) = 69 (* + -)
((9 * 8) + (1 - 4)) = 69 (* - +)
((9 * (8 + 1)) - 4) = 77 (+ * -)
(9 * ((8 + 1) - 4)) = 45 (+ - *)
((9 * 8) + (1 - 4)) = 69 (- * +)
(9 * (8 + (1 - 4))) = 45 (- + *)
Скажем, я разработчик, и мне не хочется запоминать таблицы приоритетов и т. Д., Поэтому я просто угадаю.
В этом случае наибольшая погрешность будет 45-77, что составляет разницу в 32. Это означает, что мое предположение будет отклонено максимум на 32.
Соревнование
Принимая во внимание выражение , состоящее из чисел и +
, -
, *
, /
(целочисленное деление) и %
, выходной абсолютная разность наибольшего и наименьшего возможного значения для этого выражения, на основе приоритета операторов.
Характеристики
- Входное выражение не будет содержать скобок, и каждый оператор является левоассоциативным.
- Входное выражение будет содержать только неотрицательные целые числа. Однако подвыражения могут быть оценены как отрицательные (например
1 - 4
). - Вы можете взять выражение в любом разумном формате. Например:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- Вход будет содержать не менее 1 и не более 10 операторов.
- Любое выражение, которое содержит деление или по модулю на 0, должно игнорироваться.
- Вы можете предположить, что по модулю не будут даны отрицательные операнды.
Тестовые случаи
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
работает оператор на отрицательных числах? Путь как C или Python или что-то еще?
%
два разных приоритета во втором примере.