罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。
记数的方法:
-
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
-
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
-
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
-
在一个数的上面画一条横线,表示这个数增值 1,000 倍,如
思路:将罗马数字的每个字母按照顺序转换成整数存入数组中;然后按照上述规则操作数组,得到最后的结果。
代码如下:
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int result = 0; 5 int last = 0; 6 vector<int> tag; 7 int n = s.length(); 8 for(int i = 0; i < n; ++i) 9 { 10 switch (s[i]) 11 { 12 case 'I': 13 tag.push_back(1); 14 break; 15 case 'X': 16 tag.push_back(10); 17 break; 18 case 'C': 19 tag.push_back(100); 20 break; 21 case 'M': 22 tag.push_back(1000); 23 break; 24 case 'V': 25 tag.push_back(5); 26 break; 27 case 'L': 28 tag.push_back(50); 29 break; 30 case 'D': 31 tag.push_back(500); 32 break; 33 } 34 result = result + tag[i]; 35 } 36 for(int i = 0; i < n-1; ++i) 37 { 38 if(tag[i] == 1 || tag[i] == 10 || tag[i] == 100) 39 { 40 if(tag[i] < tag[i+1]) 41 { 42 result = result - 2 * tag[i]; 43 } 44 } 45 } 46 47 return result; 48 } 49 };