美文网首页
13. Roman to Integer

13. Roman to Integer

作者: larrymusk | 来源:发表于2017-11-25 21:07 被阅读0次

首先理解罗马数字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

      本文链接:https://www.haomeiwen.com/subject/kafhbxtx.html