//罗马数字转换为阿拉伯整型
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
int map_c(const char c)
{
switch(c)
{
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
//如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1;否
//则,将当前值加入到结果中,然后开始下一段记录。比如VI = 5 + 1, II=1+1
int romanToInt(string s){
if(s.size() == 0)
return 0;
int result = 0;
for(int i = 0; i < s.size(); i++)
{
if(i > 0 && map_c(s[i]) > map_c(s[i-1])) //当前的字符大于它前面的,表示为减
{//这里为什么减掉2*map_c(s[i-1]), 是因为之前加了它一次 s[i-1]
result += map_c(s[i]) - 2*map_c(s[i-1]);
}
else
result += map_c(s[i]);
}
return result;
}
};
int main()
{
string str = "XIV";
Solution s;
int re = s.romanToInt(str);
cout << "re = " << re << endl;
return 0;
}