LeetCode学习(2) 将罗马数字转换为数字

1.罗马数字表示如下:
I- 1 II - 2 III - 3IV - 4V – 5VI - 6VII – 7VIII - 8IX - 9X – 10
XI – 11XII – 12XIII – 13XIV – 14XV – 15XVI – 16XVII – 17
XVIII – 18 XIX – 19 XX – 20 XXVIII - 28 XXX - 30
XL - 40 L - 50LX - 60LXX - 70LXXX - 80XC - 90XCIX - 99
C - 100
2.罗马数字只有7个字母组成,每个字母代码的字如下
字母 M D C L X V I
代表数字1000 500 100 50 10 5 1

//c++ VS2013环境
#include<iostream>
using namespace std;

int getNum(char c)
{
    switch (c)
    {
    case 'I':
        return 1;
    case 'V':
        return 5;
    case 'X':
        return 10;
    case 'L':
        return 50;
    case 'C':
        return 100;
    case 'D':
        return 500;
    case 'M':
        return 1000;
    }
}
int romanToInt(string s) {
    // Start typing your C/C++ solution below
    // DO NOT write int main() function
    int result = 0;
    for (int i = 0; i<s.size(); i++)
    {
        result += getNum(s[i]);
    }

    int pre = 0;
    int cur = getNum(s[0]);

    for (int i = 1; i<s.size(); i++)
    {
        pre = cur;
        cur = getNum(s[i]);
        if ((pre * 5 == cur) || (pre * 10 == cur))
        {
            result -= 2 * pre;
        }
    }
    return result;
}
int romantoInt(string s) {  
        int tagVal[256];  
        tagVal['I'] = 1;  
        tagVal['V'] = 5;  
        tagVal['X'] = 10;  
        tagVal['C'] = 100;  
        tagVal['M'] = 1000;  
        tagVal['L'] = 50;  
        tagVal['D'] = 500;  
        int val = 0;  
        for(int i = 0; i < s.length(); i++){  
            if(i+1 >= s.length() || tagVal[s[i+1]] <= tagVal[s[i]])  
                val += tagVal[s[i]];  
            else  
                val -= tagVal[s[i]];   
        }  
        return val;   
    }  
int main()
{
    string s = "VII";
    cout<<romanToInt(s);
   //cout<<romantoInt(s);第二种方式进行转换
    cout << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值