这是个自动机问题,而且是简单题,就不做注解了。
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; } };
原文:https://www.cnblogs.com/hyffff/p/14772935.html