Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Personal tips:建立map储存罗马数字I,V,X,L,C,D,M,根据规则,小的数字在大的前面则减,在后则加。代码如下:
class Solution {
public:
Solution()
{
RomanToIntTable.insert(pair<char, int>('I', 1));
RomanToIntTable.insert(pair<char, int>('V', 5));
RomanToIntTable.insert(pair<char, int>('X', 10));
RomanToIntTable.insert(pair<char, int>('L', 50));
RomanToIntTable.insert(pair<char, int>('C', 100));
RomanToIntTable.insert(pair<char, int>('D', 500));
RomanToIntTable.insert(pair<char, int>('M', 1000));
}
int romanToInt(string s) {
int num = 0, i = 0;
while (s[i]!='\0')
{
int count = 1;
while (RomanToIntTable[s[i]]== RomanToIntTable[s[i+1]])
{
++i; ++count;
}
if (RomanToIntTable[s[i + 1]] < RomanToIntTable[s[i]]) num += count*RomanToIntTable[s[i]];
else if (RomanToIntTable[s[i + 1]] > RomanToIntTable[s[i]])
{
num -= count*RomanToIntTable[s[i]];
}
++i;
}
return num;
}
private:
map<char, int> RomanToIntTable;
};