1. 程式人生 > 實用技巧 >13.羅馬數字轉整數

13.羅馬數字轉整數

羅馬數字包含以下七種字元: 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;
    }