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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容