Дано число.
Нужно сформировать для него строку в римской нотации.
Римские цифры представлены семью различными символами: 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.
Входные данные: num = 3
Результат: “III”
Пояснение: 3 = III.
Входные данные: num = 58
Результат: “LVIII”
Пояснение: L = 50, V= 5, III = 3.
Входные данные: num = 1994
Результат: “MCMXCIV”
Пояснение: M = 1000, CM = 900, XC = 90 и IV = 4.
class Solution {
public:
string intToRoman(int num) {
string ss = "";
vector<pair<int,string>> v = {
{1000,"M"}, {900,"CM"}, {500,"D"}, {400,"CD"}
, {100,"C"}, {90,"XC"}, {50,"L"}, {40,"XL"}
, {10,"X"}, {9,"IX"}, {5,"V"}, {4,"IV"}, {1,"I"}
};
while(num) {
for(int i = 0; i <= 12; i++){
while(num - v[i].first >=0){
num -= v[i].first;
ss += v[i].second;
}
}
}
return ss;
}
};