【发布时间】:2018-05-26 03:19:11
【问题描述】:
我正在尝试在 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
【问题讨论】:
标签: matlab loops if-statement octave roman-numerals