Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
题意:
给定一个罗马数字,转换成整数。
分析:
在构成数字的时候,有下列规则:
1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
4、正常使用时,连写的数字重复不得超过三次。
class Solution {
private:
int val[255];
void init() {
val['I'] = 1; val['V'] = 5; val['X'] = 10; val['L'] = 50;
val['C'] = 100; val['D'] = 500; val['M'] = 1000;
}
public:
int romanToInt(string s) {
init();
int ret = 0;
for (int i = 0; i < s.size(); i++) {
if (i > 0 && val[s[i]] > val[s[i - 1]]) {
ret += val[s[i]] - 2 * val[s[i - 1]];
} else {
ret += val[s[i]];
}
}
return ret;
}
};