LintCode: Roman to Integer 羅馬數字轉成十進制整數

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 https://www.lintcode.com/problem/roman-to-integer/description

另外由Wiki的說明
羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。

所以筆者在程式中寫了個轉換函式number。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class Solution {
public:
    short number(char c)
    {
        short num;
    
        switch(c)
        {
            case 'I':
                num =  1;
                break;
    
            case 'V':
                num = 5;
                break;
    
            case 'X':
                num = 10;
                break;
    
            case 'L':
                num = 50;
                break;
    
            case 'C':
                num = 100;
                break;
    
            case 'D':
                num = 500;
                break;
    
            case 'M':
                num = 1000;
                break;
    
            default:
                num = 0;
                break;
        }
    
        return num;
    }
    
    short getValue(const string& s )
    {
            short preValue = 1000, curValue, value = 0;
            short len = s.length();
    
            for( int i = 0; i < len; i++ )
            {
                curValue = number(s[i]);
                value += curValue;
    
                if( curValue > preValue )
                    value -= 2 * preValue;
    
                preValue = curValue;
            }
    
            return value;
    }

    /**
     * @param s Roman representation
     * @return an integer
     */
    int romanToInt(string& s) {
        // Write your code here
        return (int)getValue(s);
    }
};

沒有留言: