Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路
很简单,注意4和9的处理就行了。另外,从末位开始计算比较好算,这样可以比较清楚的知道哪一位是阿拉伯数字的哪一位。
class Solution {
public:
int romanToInt(string s) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
int sLen=s.length();
char con[7]={'I','V','X','L','C','D','M'};
int dig[7]={1,5,10,50,100,500,1000};
int res=0;
for(int i=sLen-1;i>=0;i--)
{
for(int j=0;j<7;j++)
{
if(s[i]==con[j])
{
res+=dig[j];
if(j>0 && i>0 && s[i-1]==con[j+j%2-2])
{
res-=dig[j+j%2-2];
i--;
}
}
}
}
return res;
}
};下一篇是对应的Integer to Roman

本文介绍了一种将罗马数字转换为整数的有效算法。通过从后往前遍历输入字符串并考虑特殊情况(如IV和IX),该算法能正确处理1到3999范围内的罗马数字。文章还提供了一个C++实现示例。
5133

被折叠的 条评论
为什么被折叠?



