Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Giá trị số La Mã

Chuyển đổi số La Mã thành số nguyên.

Bạn sẽ học được gì

  • Ánh xạ ký hiệu sang giá trị bằng từ điển
  • Xử lý các cặp trừ như IV và XC
  • Duyệt chuỗi và nhìn trước ký tự kế tiếp

Đề bài

Xem bản gốc (English)

Chuyển đổi một số La Mã hợp lệ thành giá trị số nguyên tương ứng. Các ký hiệu là I=1, V=5, X=10, L=50, C=100, D=500, M=1000; nếu một ký hiệu nhỏ hơn đứng trước một ký hiệu lớn hơn thì sẽ bị trừ đi (IV = 4, CM = 900).

Cài đặt hàm roman_to_int(text).

Đầu vào

text: Một số La Mã hợp lệ.

Đầu ra

Trả về giá trị số nguyên tương ứng.

Ràng buộc

1 ≤ giá trị ≤ 3.999

Ví dụ

Ví dụ 1
Đầu vào:
text = "XIV"

Kết quả mong đợi:
expected = 14
Đầu vào:
std::string text = "XIV";

Kết quả mong đợi:
long long expected = 14;
Đầu vào:
string text = "XIV";

Kết quả mong đợi:
long expected = 14;

Giải thích

X = 10, IV = 4: 14.

Ví dụ 2
Đầu vào:
text = "MCMXCIV"

Kết quả mong đợi:
expected = 1994
Đầu vào:
std::string text = "MCMXCIV";

Kết quả mong đợi:
long long expected = 1994;
Đầu vào:
string text = "MCMXCIV";

Kết quả mong đợi:
long expected = 1994;

Giải thích

M=1000, CM=900, XC=90, IV=4: 1994.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Phần lớn ký hiệu được cộng giá trị, nhưng một số cặp sẽ bị trừ khi ký hiệu nhỏ đứng trước ký hiệu lớn.

Gợi ý 2

Duyệt số La Mã từ trái sang phải và so sánh mỗi ký hiệu với ký hiệu kế tiếp.

Gợi ý 3

Đảm bảo ký hiệu cuối cùng luôn được xử lý đúng vì nó không có ký hiệu theo sau.

Độ phức tạp mong đợi

thời gian O(n), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.