给定一串串罗马数字,转换为对应整数值
代码如下:
class Solution
{
public:
int romanToInt(string s)
{
const int sz=s.size()-1;
int result=convert(s[sz]),cur=0,fro=0;
for(int i=sz-1;i>=0;i--)
{
cur=convert(s[i+1]);
fro=convert(s[i]);
if(fro<cur)
{
result-=fro;
}
else
{
result+=fro;
}
}
return result;
}
inline int convert(char c)
{
switch(c)
{
case'I': return 1;
case'V': return 5;
case'X': return 10;
case'L': return 50;
case'C': return 100;
case'D': return 500;
case'M': return 1000;
default: return 0;
}
}
};
从后往前扫,判定当前字符cur代表数字和相邻左边字符fro代表数字大小。
当前值cur大于左侧值fro,fro取负,否则fro取正。
将fro累加起来即为转换后的值。