13. Roman to Integer

首先理解罗马数字https://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97

罗马数字共有7个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。

MCDXXXVII 1437

int romanToInt(char* s) 
{
    int rc = 0;
    int val = 0;
    int prevVal = 0;
    
    char* cur = s + strlen(s);
    
    while(cur != (s - 1))
    {
        switch(*cur)
        {
            case 'I':
                val = 1;
                break;
            case 'V':
                val = 5;
                break;
            case 'X':
                val = 10;
                break;
            case 'L':
                val = 50;
                break;
            case 'C':
                val = 100;
                break;
            case 'D':
                val = 500;
                break;
            case 'M':
                val = 1000;
                break;
            default:
                val = 0;
                break;
        }
        
        if (val < prevVal)
        {
            rc -= val;
        }
        else
        {
            rc += val;
        }
        prevVal = (val < prevVal) ? prevVal : val;
        cur--;
    }
    
    return rc;
}

你可能感兴趣的:(13. Roman to Integer)