我正在尝试在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) …Run Code Online (Sandbox Code Playgroud)