Đề bài
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ụ
Đầ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.
Đầ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.