题目13:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
int StrLen(char* s)
{
int l = 0;
while (*s++ != 0)
{
l++;
}
return l;
}
int romanToInt(char* s)
{
int res = 0;
int i = 3;
char left = 0;
char mid = 0;
char right = 0;
int mul = 0;
int len = StrLen(s);
/* 千位 */
if (*s == 'M')
{
while (*s == 'M')
{
res += 1000;
s++;
}
}
/* 查找百位、十位和个位 */
while (i)
{
switch (i)
{
case 3:
left = 'C';
mid = 'D';
right = 'M';
mul = 100;
break;
case 2:
left = 'X';
mid = 'L';
right = 'C';
mul = 10;
break;
case 1:
left = 'I';
mid = 'V';
right = 'X';
mul = 1;
break;
default:
break;
}
if (*s == left)
{
if (*(s+1) == mid)
{
/* 4 */
res += 4 * mul;
s += 2;
}
else
{
if (*(s+1) == right)
{
/* 9 */
res += 9 * mul;
s += 2;
}
else
{
/* 1、2、3 */
res += mul;
s++;
while (*s == left)
{
res += mul;
s++;
}
}
}
}
else
{
if (*s == mid)
{
/* 5 */
res += 5 * mul;
s++;
/* 6、7、8*/
while (*(s) == left)
{
res += mul;
s++;
}
}
}
i--;
}
return res;
}