这个和上一个题相反。
嘿嘿嘿,比较猥琐的我本来是想用上一个题,打一个3999的表,但是我觉得这样太不厚道了。
于是我选择了好好做题= =
当然上一个题的代码太多的switch 和 if else
所以。。。
我决定改进一下。
附上代码:依然是一次AC
class Solution { public: int num; int romanToInt(string s) { // Note: The Solution object is instantiated only once and is reused by each test case. num = 0; string sub[] = { "CM","DCCC","DCC","DC","D","CD","CCC","CC","C", "XC","LXXX","LXX","LX","L","XL","XXX","XX","X", "IX","VIII","VII","VI","V","IV","III","II","I" }; int q[] = { 900,800,700,600,500,400,300,200,100, 90,80,70,60,50,40,30,20,10, 9,8,7,6,5,4,3,2,1 }; int i; for(i = 0;i < s.size();i++) { if(s[i] != 'M') break; else num += 1000; } s = s.substr(i,s.size()); for(int i = 0;i < 27;i++) { s = stringtoint(s,i,sub,q); } return num; } string stringtoint(string s,int i,string sub[],int q[]) { if(finds(s,sub[i])) { num += q[i]; s = s.substr(sub[i].length(),s.size()-1); } return s; } bool finds(string s,string sub) { if(s.size() < sub.size()) return false; for(int i = 0;i < sub.size();i++) { if(s[i] != sub[i]) return false; } return true; } };