思路分析:
由于罗马数字中小的数字放在大的数字右边时,表示加上这个数字,而放在大的数字左边时,则表示减去这个数字,因此我们需要设计语句判断一个罗马数字的加减。
我们用循环让罗马数相邻的两个数字依次比较,同时将计算结果保存在sum中:若前数较大则sum加上前数,前数较小则减去前数。
注意到边界情况:最后一个数字不必与下一个数比较,总是加的。
为简化代码,设计定义一个函数将单个罗马数字转化为整数。
代码实现(c++):
class Solution
{
public:
int romanint(char k)
{
switch(k)
{
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
}
return 0;
}
int romanToInt(string s)
{
int sum=0,i,p,q;
for(i=0;s[i+1]!=0;i++)
{
p=romanint(s[i]);
q=romanint(s[i+1]);
sum+=((p<q)?-p:p);
}
sum+=romanint(s[i]);
return sum;
}
};
运行结果