Я пытаюсь написать функцию в Octave для преобразования римских цифр в десятичные числа.
То, что у меня есть до сих пор, имеет две основные проблемы:
1) Он будет работать только для римских цифр длиной до 6 букв.
2) Ответ правильный только в том случае, если каждая буква меньше предыдущей. т.е. он не будет правильно вычислять (IV) как 4, а неправильно как 6.
Мне нужно как-то исправить обе эти проблемы. У меня есть сильное подозрение, что мой подход к проблеме неверен и что есть более эффективный способ сделать это.
В любом случае, если проблема вас интересует и/или вы знаете хороший способ сделать это, мы будем очень признательны за любую помощь.
function roman2num(s)
decimal = [1000, 500, 100, 50, 10, 5, 1];
roman = ["M", "D", "C", "L", "X", "V", "I"];
num = 0;
for i = 1:7
if strcmp(s(1), roman(i))
num += decimal(i);
break
end
end
if length(s) >= 2
for i = 1:7
if strcmp(s(2), roman(i))
num += decimal(i);
break
end
end
end
if length(s) >= 3
for i = 1:7
if strcmp(s(3), roman(i))
num += decimal(i);
break
end
end
end
if length(s) >= 4
for i = 1:7
if strcmp(s(4), roman(i))
num += decimal(i);
break
end
end
end
if length(s) >= 5
for i = 1:7
if strcmp(s(5), roman(i))
num += decimal(i);
break
end
end
end
if length(s) >= 6
for i = 1:7
if strcmp(s(6), roman(i))
num += decimal(i);
break
end
end
end
num
end