Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
按千位,百位,十位,个位依次按类型枚举;
class Solution {
public:
int romanToInt(string s) {
int num = 0;
int i = 0;
int k = 0;
for(i = 0;i,s.length();i++)
{
if(s[i] == 'M')
num = num+1000;
else
break;
}
/*判断百位*/
int j = i;
if(s[i] == 'C' || s[i] == 'D' && i< s.length())
{
if(s[i] == 'C')
{
if(s[i+1] == 'C' && i+1 < s.length())
{
if(s[i+2] == 'C' && i+2 < s.length())
{
num = num +300;
j = i+3;
}
else
{
num = num +200;
j = i+2;
}
}
else if(s[i+1] == 'D' && i+1 <s.length())
{
num = num +400;
j = i+2;
}
else if(s[i+1] == 'M' && i+1 < s.length())
{
num = num +900;
j = i+2;
}
else
{
num = num +100;
j = i+1;
}
}
else
{
num = num +500;
if(s[i+1] =='C' &&s[i+2] == 'C' && s[i+3] == 'C' && i+3 < s.length())
{
num = num +300;
j = i+4;
}
else if(s[i+1] == 'C' && s[i+2] == 'C' && i+2 < s.length())
{
num = num +200;
j = i+3;
}
else if(s[i+1] == 'C' && i+1 < s.length())
{
num = num +100;
j = i+2;
}
else
{
j = i+1;
}
}
}
/*判断十位*/
i = j;
if(s[j] == 'X' || s[j] == 'L' && j<s.length())
{
i = j;
if(s[j] == 'X')
{
if(s[j+1] == 'X' && s[j+2] == 'X' && j+2 < s.length())
{
num = num + 30;
i = j+3;
}
else if(s[j+1] == 'X' && j+1 <s.length())
{
num = num +20;
i = j+2;
}
else if(s[j+1] == 'L' && j+1 < s.length())
{
num = num +40;
i = j+2;
}
else if(s[j+1] == 'C' && j+1 < s.length())
{
num = num +90;
i = j+2;
}
else
{
num = num +10;
i = j+1;
}
}
else if(s[j] == 'L')
{
num = num +50;
for(k = j+1;k<s.length();k++)
{
if(s[k] == 'X')
num =num +10;
else
{
i = k;
break;
}
}
}
}
/*判断个位
*/
if(s[i] == 'V' || s[i] == 'I' && i<s.length())
{
if(s[i] == 'V')
{
num = num + 5;
for(j = i+1;j<s.length();j++)
{
if(s[j] == 'I')
{
num = num +1;
}
}
}
else if(s[i] == 'I')
{
if(s[i+1] == 'I' && s[i+2] =='I' && i+2<s.length())
num = num +3;
else if(s[i+1] == 'I' && i+1 < s.length())
num = num +2;
else if(s[i+1] == 'V' && i+1 < s.length())
num =num +4;
else if(s[i+1] == 'X' && i+1 < s.length())
num = num +9;
else
num = num +1;
}
}
return num;
}
};