Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
羅馬數字:
‘I’ -- 1, ‘V’ -- 5, ‘X’ -- 10, ‘L‘ -- 50, ’C‘ -- 100, ’D‘ -- 500, ’M‘ -- 1000 。 其中,IV表示4, VI表示6
思路:
採用map方式,建立羅馬char與數字的映射。
值得注意的是,在羅馬數字裏,IV表示4, VI表示6。因此要從後向前遍歷,當前一個數比後一個數小,應該在總值上,減去這個值。e.g IV中,V表示5. I表示1. 因爲I在V的前面,所以實際表示的數是4.
代碼(C++):
int romanToInt(string s) {
map<char, int> map1;
map1['I'] = 1;
map1['V'] = 5;
map1['X'] = 10;
map1['L'] = 50;
map1['C'] = 100;
map1['D'] = 500;
map1['M'] = 1000;
int len = s.length();
int num = 0;
int n;
for(int i = len -1; i>=0; i--)
{
n = map1[s[i]];
if(i < len -1 && n < map1[s[i+1]])
{
num = num - n;
}
else
{
num = num + n;
}
}
return num;
}
PS:C++語法都不懂,用C++刷題,簡直是自虐啊!!