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

来源:互联网 发布:bae java jar 编辑:程序博客网 时间:2024/05/16 10:05

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;}
原创粉丝点击