Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字转到十进制,首先得知道罗马数字的计数规则:
个位:I,II,III,IV,V,VI,VII,VIII,IX
十位:X,XX,XXX,XL,L,LX,LXX,LXXX,XC
百位:C,CC,CCC,CD,D,DC,DCC,DCCC,CM
从右向左遍历字符串,如果s[i+1]代表的十进制值>s[i],则减去s[i],否则加上s[i]。XXIX:29 XXX:30 XCIII:93 XCV:95 CCC:300 CD:400
int romanToInt(string s)
{
int length = s.length();
if(length == 0)
return 0;
map<char,int> m;
m['I'] = 1;
m['V'] = 5;
m['X'] = 10;
m['L'] = 50;
m['C'] = 100;
m['D'] = 500;
m['M'] = 1000;
int i = length-1;
int sum = m[s[i--]];
while(i>=0)
{
if(m[s[i+1]] > m[s[i]])
sum -= m[s[i--]];
else
sum += m[s[i--]];
}
return sum;
}