leetcode13. 罗马数字转整数


这是个自动机问题,而且是简单题,就不做注解了。

class Solution {
public:
int romanToInt(string s) {
int status=0;
int num=0;
int i=0;
while(i<s.length()){
cout<<i<<" "<<num<<endl;
switch(status){
case 0:
if(s[i]=='L'){
num+=50;
}
if(s[i]=='D'){
num+=500;
}
if(s[i]=='M'){
num+=1000;
}
if(s[i]=='V'){
num+=5;
}
if(s[i]=='I'){
status=1;
}
if(s[i]=='X'){
status=10;
}
if(s[i]=='C'){
status=100;
}
i++;
break;
case 1:
if(s[i]=='V'){
num+=4;
status=0;
i++;
}else if(s[i]=='X'){
num+=9;
status=0;
i++;
}else{
num+=1;
status=0;
}
break;
case 10:
if(s[i]=='L'){
num+=40;
status=0;
i++;
}else if(s[i]=='C'){
num+=90;
status=0;
i++;
}else{
num+=10;
status=0;
}
break;
case 100:
if(s[i]=='D'){
num+=400;
status=0;
i++;
}else if(s[i]=='M'){
num+=900;
status=0;
i++;
}else{
num+=100;
status=0;
}
break;
}
}
cout<<num<<endl;
return num+status;
}
};

浙公网安备 33010602011771号