题目:给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
规则:
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 | 数值 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
通常情况下,罗马数字中小的数字在大的数字的右边,表示相加。如果小的数字在大的数字的左边,则表相减。
示例 1:
输入: "III"
输出: 3
示例 2:
输入: "IV"
输出: 4
示例 3:
输入: "IX"
输出: 9
示例4:
输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:
输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
代码:
int romanToInt(char * s){
int pre = 0, cur = 0;
int sum = 0;
for (int i = 0; i < strlen(s); i++) {
switch(s[i]) {
case 'I': cur = 1; break;
case 'V': cur = 5; break;
case 'X': cur = 10; break;
case 'L': cur = 50; break;
case 'C': cur = 100; break;
case 'D': cur = 500; break;
case 'M': cur = 1000; break;
defalt:return 0;
}
sum += (cur>pre)?(-pre):(pre);
pre = cur;
}
sum += pre;
return sum;
}