罗马数字的问题可以参考这篇博文,讲的很清楚
代码:
1 int transfer(char c) { 2 switch (c) { 3 case 'I': return 1; 4 case 'V': return 5; 5 case 'X': return 10; 6 case 'L': return 50; 7 case 'C': return 100; 8 case 'D': return 500; 9 case 'M': return 1000; 10 default: return -1; 11 } 12 } 13 14 int romanToInt(string s) { 15 int res = 0; 16 int pre = 0; 17 for (int i = 0; i < s.length(); i++) { 18 int curr = transfer(s[i]); 19 if (curr <= pre) 20 res += curr; 21 else { 22 res -= pre * 2; 23 res += curr; 24 } 25 pre = curr; 26 } 27 28 return res; 29 }
还有一种非常残暴的方法,在看Ruby教程的时候偶然发现的。即,遇到不规则的字母,比如IV,替换成最基本的字母,比如IIII。这样全部替换完成之后,从头到尾扫一遍就行了。