答案 0 :(得分:2)
这个想法是从头到尾遍历罗马数字字符串。对于每个字符,将相应的数字添加到结果中。对于一些特殊的 例如'I','X','C',检查结果是否大于相应的数字。如果是,我们需要减去数字 从结果。如果不是,我们需要在结果中添加数字。
res = 0
for each character c backwards:
if c =='I'
res += res + (res >= 5 ? -1 : 1)
else if c=='V'
res += res + 5
else if c=='X'
res += 10 * (res >= 50 ? -1 : 1)
else if c=='L'
res += 50;
else if c == 'C'
res += 100 * (res >= 500 ? -1 : 1)
else if c== 'D'
res += 500
else if c=='M'
res += 1000
return res
例如:MMDCCCXCIX
= 0 + MMDCCCXCIX
= 10 + MMDCCCXCI
= 9 + MMDCCCXC(10> 5)
= 109 + MMDCCCX
= 99 + MMDCCC(作为109> 50)
= 199 + MMDCC
= 299 + MMDC
= 399 + MMD
= 899 + MM
= 1899 + M
= 2899