Katakanlah saya memiliki ekspresi:
9 * 8 + 1 - 4
Ungkapan ini dapat ditafsirkan dalam enam cara berbeda, tergantung pada prioritas operator:
(((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 (- + *)
Katakanlah saya seorang pengembang, dan saya tidak ingin menghafal tabel prioritas, dll., Jadi saya hanya akan menebak.
Dalam hal ini, margin kesalahan terbesar adalah 45-77, yang merupakan perbedaan 32. Ini berarti bahwa tebakan saya hanya akan dimatikan oleh maksimum 32.
Tantangan
Mengingat ekspresi yang terdiri dari angka dan +
, -
, *
, /
(pembagian integer) dan%
, output perbedaan mutlak dari nilai yang mungkin terbesar dan terkecil untuk ekspresi yang, berdasarkan didahulukan dari operator.
Spesifikasi
- Ekspresi input tidak akan mengandung tanda kurung dan setiap operator adalah asosiatif kiri.
- Ekspresi input hanya akan mengandung bilangan bulat tidak negatif. Namun, subekspresi dapat dievaluasi menjadi negatif (misalnya
1 - 4
). - Anda dapat mengambil ekspresi dalam format apa pun yang masuk akal. Sebagai contoh:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- Input akan berisi setidaknya 1 dan paling banyak 10 operator.
- Ekspresi apa pun yang berisi pembagian atau modulo dengan 0 harus diabaikan.
- Anda dapat mengasumsikan bahwa modulo tidak akan diberikan operan negatif.
Uji Kasus
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 bekerja pada angka negatif? Cara seperti C atau Python atau yang lainnya?
%
memiliki dua prioritas berbeda dalam contoh kedua Anda.