Функция принимает век в римском формате и возращает в числовом
задача - принимать в функции век в римском формате и выводить в числовом Как сделал я- по сути функция не работает по непонятным причинам
function getCentury(str) {
str.split('')
let counter=0
for (let i=0; i<str.length; i++) {
let I, II, III, V, X
I=1
II=2
III=3
V=5
X=10
counter=counter+str[i]
if (str[0]===1) counter-=1
}
console.log(counter)
}
getCentury('XXI')
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Заметил, что можно ходить по строке справа налево. Если численное значение текущего символа меньше, чем предыдущего - вычесть его из суммы (IV: I < V → 5 - 1), если больше либо равен, суммировать:
XVII: // sum = I (1)
I == I // sum += 1
V > I // sum += 5
X > V // sum += 10
// 17
let test = [
"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X",
"XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX",
"XXI", "XXII", "XXV", "XXX", "LXIV", "CCCLXIV", "CDLVI", "MMDI"
];
test.forEach( e => console.log(e + " → " + parseRoman(e)) );
/***/
function parseRoman(str) {
let roman = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};
let sum = 0, last = 0;
for( let i = str.length - 1; i >= 0; i-- ) {
let curr = roman[ str[i] ]; // Конвертирует римский символ в число
sum += (curr >= last) ? curr : -curr;
last = curr;
}
return sum;
}
Проверять на валидность - отдельная история, нужно больше думать)