Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
I - 1
V - 5
X - 10
L - 50
C - 100
D - 500
M - 1000
If a lower value symbol is before a higher value one, it is subtracted. Otherwise it is added.
So 'IV' is '4' and 'VI' is '6'.
And for adding 'XIII' makes '13'
For the numbers above X, only the symbol right before it may be subtracted: so 99 is: XCIX (and not IC).
class Solution
{
public:
int romanToInt(string s)
{
int nsLen = s.length();
int nRemain = 0 ,nNumFor = 0 ,nNumLat ,nSum = 0;
for (int nTemp = 0; nTemp < nsLen; nTemp++)
{
switch (s[nTemp])
{
case 'I' : nNumLat = 1; break;
case 'V': nNumLat = 5; break;
case 'X': nNumLat = 10; break;
case 'L': nNumLat = 50; break;
case 'C': nNumLat = 100; break;
case 'D': nNumLat = 500; break;
case 'M': nNumLat = 1000; break;
default:
break;
}
if (nNumLat < nNumFor)
{
nSum += nRemain;
nRemain = nNumLat;
}
else if (nNumLat == nNumFor)
{
nRemain += nNumLat;
}
else
{
nRemain = nNumLat - nRemain;
}
nNumFor = nNumLat;
}
nSum += nRemain;
return nSum;
}
};