题目:
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 |
然后对一些罗马字母进行分析后会发现,每一个字母只要比前一个字母代表的数字大, 那么前一个字母就应该为负号,同时最前一个和最后一个都是正号。
代码:
class Solution {
public:
int romanToInt(string s) {
int res=0,curI=0,length=s.length();
int pre=0,now;
while(s[curI]==' '&&curI<length)curI++;
while(curI<length){
s[curI]=toupper(s[curI]);
switch(s[curI]){
case 'I':now=1;break;
case 'V':now=5;break;
case 'X':now=10;break;
case 'L':now=50;break;
case 'C':now=100;break;
case 'D':now=500;break;
case 'M':now=1000;break;
}
if(curI==length-1){
if(now>pre)res-=pre;
else res+=pre;
res+=now;
}
else{
if(now>pre)res-=pre;
else res+=pre;
pre=now;
}
curI++;
}
return res;
}
};