Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

按千位,百位,十位,个位依次按类型枚举;

class Solution {
public:
           int romanToInt(string s) {
           int num = 0;
           int i = 0;
           int k = 0;
           for(i = 0;i,s.length();i++)
           {
              if(s[i] == 'M')
                num = num+1000;
              else
                break;
           }
           /*判断百位*/
           int j = i;
           if(s[i] == 'C' || s[i] == 'D' && i< s.length())
           {
             if(s[i] == 'C')
             {
                 if(s[i+1] == 'C' && i+1 < s.length())
                 {
                     if(s[i+2] == 'C' && i+2 < s.length())
                       {
                          num = num +300;
                          j = i+3;
                       }
                     else
                     {
                         num = num +200;
                         j = i+2;
                     }

                 }
                 else if(s[i+1] == 'D' && i+1 <s.length())
                 {
                     num = num +400;
                     j = i+2;
                 }
                 else if(s[i+1] == 'M' && i+1 < s.length())
                 {
                    num = num +900;
                    j = i+2;
                 }
                 else
                 {
                     num = num +100;
                     j = i+1;
                 }
             }
             else
             {
               num  = num +500;
               if(s[i+1] =='C' &&s[i+2] == 'C' && s[i+3] == 'C' && i+3 < s.length())
               {
                 num = num +300;
                 j = i+4;
               }
               else if(s[i+1] == 'C' && s[i+2] == 'C' && i+2 < s.length())
               {
                   num = num +200;
                   j = i+3;
               }
               else if(s[i+1] == 'C' && i+1 < s.length())
               {
                   num = num +100;
                   j = i+2;
               }
               else
               {
                   j = i+1;
               }
             }
           }
           /*判断十位*/
           i = j;
           if(s[j] == 'X' || s[j] == 'L' && j<s.length())
           {
               i = j;
               if(s[j] == 'X')
               {
                   if(s[j+1] == 'X' && s[j+2] == 'X' && j+2 < s.length())
                   {
                       num = num + 30;
                       i = j+3;
                   }
                   else if(s[j+1] == 'X' && j+1 <s.length())
                   {
                       num = num +20;
                       i = j+2;
                   }
                   else if(s[j+1] == 'L' && j+1 < s.length())
                   {
                       num = num +40;
                       i = j+2;
                   }
                   else if(s[j+1] == 'C' && j+1 < s.length())
                   {
                       num = num +90;
                       i = j+2;
                   }
                   else
                   {
                       num = num +10;
                       i = j+1;
                   }

               }
               else if(s[j] == 'L')
               {
                   num = num +50;
                   for(k = j+1;k<s.length();k++)
                   {
                       if(s[k] == 'X')
                        num  =num +10;
                       else
                       {
                           i = k;
                           break;
                       }
                   }
               }
           }
           /*判断个位
           */

           if(s[i] == 'V' || s[i] == 'I' && i<s.length())
           {
               if(s[i] == 'V')
               {
                   num = num + 5;
                   for(j = i+1;j<s.length();j++)
                   {
                       if(s[j] == 'I')
                       {
                           num = num +1;
                       }
                   }
               }
               else if(s[i] == 'I')
               {
                   if(s[i+1] == 'I' && s[i+2] =='I' && i+2<s.length())
                     num = num +3;
                   else if(s[i+1] == 'I' && i+1 < s.length())
                    num = num +2;
                   else if(s[i+1] == 'V' && i+1 < s.length())
                    num =num +4;
                   else if(s[i+1] == 'X' && i+1 < s.length())
                    num = num +9;
                   else
                    num = num +1;
               }
           }
        return num;
    }
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值