Nói rằng tôi có một biểu thức:
9 * 8 + 1 - 4
Biểu thức này có thể được diễn giải theo sáu cách khác nhau, tùy thuộc vào quyền ưu tiên của toán tử:
(((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 (- + *)
Giả sử tôi là nhà phát triển và tôi không muốn ghi nhớ các bảng ưu tiên, v.v., vì vậy tôi sẽ đoán.
Trong trường hợp này, biên sai số lớn nhất sẽ là 45-77, chênh lệch là 32. Điều này có nghĩa là dự đoán của tôi sẽ chỉ bị tắt tối đa là 32.
Các thách thức
Với một biểu thức bao gồm các con số và +
, -
, *
, /
(phân chia số nguyên) và %
, sản lượng chênh lệch tuyệt đối của giá trị lớn nhất và nhỏ nhất có thể cho biểu rằng, dựa trên các ưu tiên của các nhà khai thác.
Thông số kỹ thuật
- Biểu thức đầu vào sẽ không chứa dấu ngoặc đơn và mọi toán tử được liên kết trái.
- Biểu thức đầu vào sẽ chỉ chứa các số nguyên không âm. Tuy nhiên, biểu hiện phụ có thể đánh giá tiêu cực (ví dụ
1 - 4
). - Bạn có thể lấy biểu thức ở bất kỳ định dạng hợp lý. Ví dụ:
"9 * 8 + 1 - 4"
"9*8+1-4"
[9, "*", 8, "+", 1, "-", 4]
[9, 8, 1, 4], ["*", "+", "-"]
- Đầu vào sẽ chứa ít nhất 1 và tối đa 10 toán tử.
- Bất kỳ biểu thức nào có chứa phép chia hoặc modulo bằng 0 nên được bỏ qua.
- Bạn có thể giả sử rằng modulo sẽ không được đưa ra toán hạng âm.
Các trường hợp thử nghiệm
9 * 8 + 1 - 4 32
1 + 3 * 4 3
1 + 1 0
8 - 6 + 1 * 0 8
60 / 8 % 8 * 6 % 4 * 5 63
%
toán tử làm việc trên các số âm? Cách như C hay Python hay cái gì khác?
%
như có hai ưu tiên khác nhau trong ví dụ thứ hai của mình.