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] Thông dịch biểu thức S-expression kiểu Lisp

    Cho một biểu thức số học dạng S-expression (kiểu Lisp) chỉ gồm: số nguyên; toán tử hai ngôi +, -, *, /; toán tử so sánh >, <, = (trả về 111 nếu đúng, 000 nếu sai); và biểu thức điều kiện (if C A B) — trả về giá trị của AAA nếu C≠0C \neq 0C=0, ngược lại trả về giá trị của BBB. Biểu thức viết với ngoặc đơn theo tiền tố, các token cách nhau bởi khoảng trắng, ví dụ (+ 1 (* 2 3)). Phép chia / là phép chia lấy phần nguyên làm tròn về 0 (như phép chia số nguyên trong C/Python int(a/b)); đề đảm bảo mẫu số luôn khác 0.

    Hãy thông dịch và tính giá trị nguyên của biểu thức.

    Ví dụ: (if (> 3 2) (+ 1 2) (* 1 2)) — vì 3>23 > 23>2 đúng nên kết quả là giá trị của (+1 2)=3(+ 1\ 2) = 3(+1 2)=3.

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

      Một dòng duy nhất chứa một biểu thức S-expression hợp lệ (độ dài không quá 1000 ký tự). Biểu thức có thể chỉ là một số nguyên đơn (không có ngoặc).

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

      In ra một số nguyên duy nhất — giá trị của biểu thức.

    Ví dụ:

    Đầu vào:

    (+ 1 (* 2 3))
    

    Đầu ra:

    7
    

    Đầu vào:

    5
    

    Đầu ra:

    5
    

    Đang tải editor...