美文网首页
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