class Solution {
public:
int romanToInt(string s)
{
int num=0;
for(int i=0;i<s.length()-1;i++)
{
if(tonumber(s[i])<tonumber(s[i+1]))
{
num=num-tonumber(s[i]);
}
else
num=num+tonumber(s[i]);
}
num=num+tonumber(s[s.length()-1]);
return num;
}
int tonumber(char c)
{
switch(c)
{
case 'I':
return 1;
break;
case 'V':
return 5;
break;
case 'X':
return 10;
break;
case 'L':
return 50;
break;
case 'C':
return 100;
break;
case 'D':
return 500;
break;
case 'M':
return 1000;
break;
}
return 0;
}
public:
int romanToInt(string s)
{
int num=0;
for(int i=0;i<s.length()-1;i++)
{
if(tonumber(s[i])<tonumber(s[i+1]))
{
num=num-tonumber(s[i]);
}
else
num=num+tonumber(s[i]);
}
num=num+tonumber(s[s.length()-1]);
return num;
}
int tonumber(char c)
{
switch(c)
{
case 'I':
return 1;
break;
case 'V':
return 5;
break;
case 'X':
return 10;
break;
case 'L':
return 50;
break;
case 'C':
return 100;
break;
case 'D':
return 500;
break;
case 'M':
return 1000;
break;
}
return 0;
}
};
罗马数字是
阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12。
(3)小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
(4)在一个数的上面画一条横线,表示这个数增值 1,000 倍。
思路:
判断当前数与右边数大小,小的话就减,大的话就相加,循环条件控制是s.length()-1,最后一个不用判断直接相加就行。