码迷,mamicode.com
首页 > 其他好文 > 详细

13.罗马数字转整数

时间:2020-07-28 14:20:32      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:har   roman   其它   else   情况   数值   字符串   字符   i+1   

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例:

输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

思路:

我们可以发现一条规律:但凡需要用到减法的都是后面的罗马数字大于当前罗马数字,例如IV,IX。
因此遍历原字符串,考虑两种情况:
(1)如果当前罗马数字小于后一位的罗马数字,则减去当前数字(需要用到map)。
(2)其它情况加上当前数字。
最后加上最后一位罗马数字对应的数值。

    int romanToInt(string s) {
        int res=0;
        map<char,int> m={{‘I‘,1},{‘V‘,5},{‘X‘,10},{‘L‘,50},{‘C‘,100},{‘D‘,500},{‘M‘,1000}};
        for(int i=0;i<s.size()-1;++i){
            if(m[s[i]]<m[s[i+1]]) res-=m[s[i]];
            else res+=m[s[i]];
        }
        res+=m[s[s.size()-1]];
        return res;
    }

13.罗马数字转整数

标签:har   roman   其它   else   情况   数值   字符串   字符   i+1   

原文地址:https://www.cnblogs.com/Frank-Hong/p/13390440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!