Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
主要弄清楚罗马数字的表示方法:
I - 1
II- 2
III-3
IV-4
V - 5
X - 10
L - 50
C - 100
D - 500
M - 1000
class Solution {
public:
int romanToInt(string s) {
map<char,int> mapVal;
mapVal.insert(pair<char,int>('I',1));
mapVal.insert(pair<char,int>('V',5));
mapVal.insert(pair<char,int>('X',10));
mapVal.insert(pair<char,int>('L',50));
mapVal.insert(pair<char,int>('C',100));
mapVal.insert(pair<char,int>('D',500));
mapVal.insert(pair<char,int>('M',1000));
int len=s.length(),res=0,i;
for(i=0; i<len-1; )
{
if(mapVal[s[i]]>=mapVal[s[i+1]])//单个字符代表数值的情况比如V代表5
{
res+=mapVal[s[i]];
i++;
}
else//2个字符代表数值的情况,比如IV代表4
{
res+=mapVal[s[i+1]]-mapVal[s[i]];
i=i+2;
}
}
if(i==len-1)
res+=mapVal[s[i]];
return res;
}
};