要求写一个子程序实现输入一串罗马数字返回它代表的阿拉伯数字。实现思路是:使用一个map来将字母和数字联系起来,通过字母索引可以找到对应的数字,然后根据罗马数字的表示形式,从字符串后向前扫描如果前面的小于后面的则和减去前面的,否则加上前面的。
代码如下:
#include<iostream>
#include<string>
#include<map>
class Solution {
public:
int romanToInt(string s) {
map<char, int> roman = {{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
int sum = roman[s.back()];
for (int i = s.length() - 2; i >= 0; i--) {
if (roman[s[i]] < roman[s[i + 1]]) {
sum -= roman[s[i]];
} else {
sum += roman[s[i]];
}
}
return sum;
}
};