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] Kiểm tra và chuẩn hóa token số

    Trong giai đoạn phân tích từ vựng, một token SỐ (dạng số thực có thể có phần mũ khoa học) hợp lệ phải khớp ĐÚNG TOÀN BỘ với biểu thức chính quy sau (viết theo cú pháp Python re):

    (0|[1-9][0-9]*)(\backslash.[0-9]+)?([eE][+\-]?[0-9]+)?\texttt{(0|[1-9][0-9]*)(\backslash.[0-9]+)?([eE][+\-]?[0-9]+)?}(0|[1-9][0-9]*)(\backslash.[0-9]+)?([eE][+\-]?[0-9]+)?

    Nói cách khác: phần nguyên không được có số 0 ở đầu trừ khi bản thân nó là 0; phần thập phân (nếu có) bắt đầu bằng dấu chấm và có ít nhất một chữ số; phần mũ (nếu có) bắt đầu bằng e hoặc E, có thể có dấu +/-, theo sau bởi ít nhất một chữ số.

    Cho nnn token ứng viên (mỗi token là một chuỗi không chứa khoảng trắng), với MỖI token hãy:

    • Nếu token đó khớp đúng toàn bộ biểu thức trên: tính giá trị số thực tương ứng rồi in ra dạng thập phân cố định với ĐÚNG 6 chữ số sau dấu phẩy (làm tròn theo quy tắc làm tròn mặc định của Python, định dạng %.6f). Nếu giá trị vượt quá khả năng biểu diễn của số thực (tràn số, cho ra vô cực), in ra ERROR.
    • Nếu token đó KHÔNG khớp (kể cả khớp một phần) biểu thức trên: in ra ERROR.

    Ví dụ: với n=6n = 6n=6 và các token 007, 3.14, 1e10, 0, 1.5e-3, 12., kết quả lần lượt là: 007 không hợp lệ (số 0 đứng đầu) → ERROR; 3.14 → 3.140000; 1e10 → 10000000000.000000; 0 → 0.000000; 1.5e-3 → 0.001500; 12. không hợp lệ (thiếu chữ số sau dấu chấm) → ERROR.

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

      Dòng đầu tiên chứa số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000). nnn dòng tiếp theo (nếu n=0n=0n=0 thì không có dòng nào), mỗi dòng chứa đúng một token ứng viên (một chuỗi không chứa khoảng trắng, độ dài không quá 100 ký tự).

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

      In ra nnn dòng theo đúng thứ tự token đầu vào, mỗi dòng là kết quả tương ứng (ERROR hoặc giá trị đã định dạng với 6 chữ số thập phân) như mô tả ở trên. Nếu n=0n=0n=0, không in gì cả.

    Ví dụ:

    Đầu vào:

    6
    007
    3.14
    1e10
    0
    1.5e-3
    12.
    

    Đầu ra:

    ERROR
    3.140000
    10000000000.000000
    0.000000
    0.001500
    ERROR
    

    Đầu vào:

    0
    

    Đầu ra:

    Đang tải editor...