1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| constexpr array<char const *, 13> roman{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
constexpr array<int, 13> arabic{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
class Solution { public: string intToRoman(int num) { stringstream roman_str; int arabic_idx = 0; while (num != 0) { if (num >= arabic[arabic_idx]) { roman_str << roman[arabic_idx]; num -= arabic[arabic_idx]; } else arabic_idx++; } return roman_str.str(); }
int romanToInt(string s) { int rst = 0; for (size_t i = 0; i < s.size();) { for (size_t j = 0; j < roman.size(); ++j) { if (s.compare(i, strlen(roman[j]), roman[j]) == 0) { rst += arabic[j]; i += strlen(roman[j]); break; } } } return rst; } };
|