一、 题目
将罗马数字转换成整型数字。前面已经介绍过罗马数字了这里就不赘述了。
二、 分析
前面的Integerto Roman 已经知道将整型数转换成罗马数字,方面一样我们需要一位位的确定。首先我们一个个的将字母和数字匹配对应,然后我们由以下的规则来思考:
1、重复次数:一个罗马数字重复几次,就表示这个数的几倍。
左加右减:
2、在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
3、在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
所以,我们在转换的时候只需要考虑到下一个字母的存在和取值,和当前的对应的值比较确定应该加或者减。
class Solution { public: int romanToInt(string s) { int out = 0; map<char, int> stand = { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } }; for (int i = 0; i < s.size(); i++) { if ((i + 1) < s.size() && stand[s[i]] < stand[s[i + 1]]) { out += stand[s[i + 1]] - stand[s[i]]; i++; } else out += stand[s[i]]; } return out; } };
原文地址:http://blog.csdn.net/zzucsliang/article/details/41605193