Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Định giá biểu thức hậu tố bằng máy ảo ngăn xếp

    Trong giai đoạn sinh mã, một biểu thức số học thường được dịch sang dạng hậu tố (postfix) rồi thực thi bởi một máy ảo ngăn xếp (stack machine): khi gặp toán hạng, máy đẩy (PUSH) giá trị vào ngăn xếp; khi gặp toán tử hai ngôi, máy lấy ra (POP) hai giá trị trên đỉnh, tính toán rồi đẩy kết quả trở lại.

    Cho một biểu thức hậu tố hợp lệ gồm các số nguyên và các toán tử +,−,×,÷+, -, \times, \div+,−,×,÷ (ký hiệu + - * /), hãy mô phỏng máy ảo ngăn xếp để tính giá trị cuối cùng.

    Quy ước: với toán tử OP, nếu hai giá trị lấy ra theo thứ tự POP là bbb rồi aaa (tức aaa được đẩy vào trước bbb), kết quả đẩy lại là a  OP  ba \; OP \; baOPb. Phép chia / luôn là phép chia hết (đề bảo đảm aaa chia hết cho bbb, b≠0b \neq 0b=0), lấy thương đúng theo nghĩa toán học.

    Ví dụ: với biểu thức hậu tố 5 1 2 + 4 * + 3 -, máy ảo thực hiện lần lượt: đẩy 5, 1, 2; gặp + tính 1+2=31+2=31+2=3; đẩy 4; gặp * tính 3×4=123 \times 4 = 123×4=12; gặp + tính 5+12=175+12=175+12=17; đẩy 3; gặp - tính 17−3=1417-3=1417−3=14. Kết quả cuối cùng là 141414.

    • Định dạng đầu vào:

      Một dòng duy nhất chứa biểu thức hậu tố, các token (số nguyên hoặc toán tử) cách nhau bởi đúng một khoảng trắng. Số lượng token không quá 100010001000. Biểu thức luôn hợp lệ (đủ toán hạng cho mọi toán tử) và mọi phép chia đều là chia hết.

    • Định dạng đầu ra:

      In ra một số nguyên duy nhất — giá trị còn lại trên đỉnh ngăn xếp sau khi thực thi hết biểu thức.

    Ví dụ:

    Đầu vào:

    3 4 +

    Đầu ra:

    7
    

    Đầu vào:

    5 1 2 + 4 * + 3 -

    Đầu ra:

    14
    

    Đang tải editor...