C代码
#define OFFSET(a) (a -'A')
int map[] = {
[OFFSET('I')] = 1,
[OFFSET('V')] = 5,
[OFFSET('X')] = 10,
[OFFSET('L')] = 50,
[OFFSET('C')] = 100,
[OFFSET('D')] = 500,
[OFFSET('M')] = 1000
};
int romanToInt(char * s){
int ans = 0;
while(s != NULL && *s != '\0') {
if((s+1) != NULL && *(s+1) != '\0') {
if (map[OFFSET(*s)] < map[OFFSET(*(s+1))]) {
ans -= map[OFFSET(*s)];
s++;
continue;
}
}
ans += map[OFFSET(*s)];
s++;
}
return ans;
}
思路
- 下一个子串比当前子串大,即当前为待减去的数;
- 建立映射表;