Powiedz, że mam wyrażenie:
9 * 8 + 1 - 4
To wyrażenie można interpretować na sześć różnych sposobów, w zależności od pierwszeństwa operatora:
(((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 (- + *)
Powiedzmy, że jestem programistą i nie chcę zapamiętywać tabel pierwszeństwa itp., Więc po prostu zgadnę.
W tym przypadku największy margines błędu wyniósłby 45-77, co stanowi różnicę 32. Oznacza to, że moje przypuszczenie będzie wyłączone tylko o 32.
Wyzwanie
Biorąc pod uwagę ekspresję składają się z liczb i +
, -
, *
, /
(podział całkowitej), a %
wyjście układu bezwzględna różnicy największej i najmniejszej możliwej wartości dla tego słowa, na podstawie pierwszeństwa operatorów.
Dane techniczne
- Wyrażenie wejściowe nie będzie zawierało nawiasów, a każdy operator jest lewostronny.
- Wyrażenie wejściowe będzie zawierać tylko nieujemne liczby całkowite. Jednak podwyrażenia mogą dawać w wyniku negatywy (np
1 - 4
.). - Możesz przyjąć wyrażenie w dowolnym rozsądnym formacie. Na przykład:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- Dane wejściowe będą zawierać co najmniej 1, a maksymalnie 10 operatorów.
- Każde wyrażenie zawierające dzielenie lub modulo przez 0 należy zignorować.
- Możesz założyć, że modulo nie otrzyma ujemnych argumentów.
Przypadki testowe
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
operator działa na liczbach ujemnych? Sposób jak C lub Python czy coś innego?
%
w drugim przykładzie traktujesz dwa różne priorytety.