@[力扣–C语言实现罗马数字转整数]
题目
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如:
罗马数字 2 写做 II ,即为两个并列的 1
12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II
罗马数字中小的数字在大的数字的右边时
例如VI = 5 + 1 = 6。但也存在特例,
罗马数字中小的数字在大的数字的左边时
例如IV = 5 - 1 = 4
这个特殊的规则只适用于以下六种情况:
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
代码
int romanToInt(char * s){
int sum = 0,pre = 0, cur = 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;
}
sum += cur > pre ? (-pre):pre; /*特殊规则,加前一位*/
pre = cur;
}
sum += pre; /*加上最后一位*/
return sum;
}