
Дана строка, представляяющая собой число, записанное в римской нотации.
Нужно получить десятичное число.
Римские цифры представлены семью различными символами: I, V, X, L, C, D и M.

Например, 2 записывается как II римской цифрой, просто две единицы складываются вместе. 12 записывается как XII, что означает просто X + II. Число 27 записывается как XXVII, то есть XX + V + II.
Римские цифры обычно пишутся от наибольшего к наименьшему слева направо. Однако цифра, обозначающая четыре, не является IIII. Вместо этого число четыре записывается как IV. Поскольку единица стоит перед пятеркой, мы вычитаем ее, получая четыре. Тот же принцип применим к числу девять, которое записывается как IX. Существует шесть случаев, когда используется вычитание:
I можно поместить перед V (5) и X (10), чтобы получилось 4 и 9.
X можно поместить перед L (50) и C (100), чтобы получилось 40 и 90.
C можно поместить перед D (500) и M (1000), чтобы получилось 400 и 900.
Входные данные: s = “III”
Результат: 3
Пояснение: III = 3.
Входные данные: s = “LVIII”
Результат: 58
Пояснение: L = 50, V= 5, III = 3.
Входные данные: s = “MCMXCIV”
Результат: 1994
Пояснение: M = 1000, CM = 900, XC = 90 и IV = 4.
class Solution {
public:
int romanToInt(string s) {
int ans = 0;
unordered_map <char,int> mp{
{'I',1}, {'V',5}, {'X',10}, {'L',50}, {'C',100}, {'D',500}, {'M',1000}};
for(int i = 0; i < s.size(); i++) {
if(mp[s[i]] < mp[s[i+1]]) {
// для IV,CM, XL, etc...
ans -= mp[s[i]];
} else {
ans += mp[s[i]];
}
}
return ans;
}
};