Di 'che ho un'espressione:
9 * 8 + 1 - 4
Questa espressione può essere interpretata in sei modi diversi, a seconda della precedenza dell'operatore:
(((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 (- + *)
Supponiamo che io sia uno sviluppatore e che non abbia voglia di memorizzare tabelle di precedenza, ecc., Quindi ho intenzione di indovinare.
In questo caso, il margine di errore più grande sarebbe 45-77, che è una differenza di 32. Ciò significa che la mia ipotesi sarà disattivata solo per un massimo di 32.
La sfida
Data un'espressione costituiti da numeri e +
, -
, *
, /
(divisione intera) e %
, in uscita la differenza assoluta del massimo e minimo valore possibile per tale espressione, basato sulla precedenza degli operatori.
specificazioni
- L'espressione di input non conterrà parentesi e ogni operatore è associativo a sinistra.
- L'espressione di input conterrà solo numeri interi non negativi. Tuttavia, le sottoespressioni possono essere valutate come negative (ad es
1 - 4
.). - Puoi prendere l'espressione in qualsiasi formato ragionevole. Per esempio:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- L'input conterrà almeno 1 e al massimo 10 operatori.
- Qualsiasi espressione che contiene una divisione o un modulo per 0 deve essere ignorata.
- Si può presumere che al modulo non verranno dati operandi negativi.
Casi test
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
funziona l'operatore su numeri negativi? Come C o Python o qualcos'altro?
%
come due precedenti diverse nel tuo secondo esempio.