此题应该归属于数学,没有涉及到任何算法。主要是理解其中原理。
只需要判断当前字符的大小是小于后一个字符的,那么就取它的相反数。
int value(char c) {
if(c == 'I') return 1;
else if(c == 'V') return 5;
else if(c == 'X') return 10;
else if(c == 'L') return 50;
else if(c == 'C') return 100;
else if(c == 'D') return 500;
return 1000;
}
int romanToInt(char * s){
int res = 0;
int l = strlen(s);
for(int i = 0; i < l - 1; i++) {
int t = value(s[i]);
if(t < value(s[i + 1])) res -= t;
else res += t;
}
res += value(s[l - 1]);
return res;
}
结果