您的位置:首页 > 其它

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

2017-10-21 18:48 369 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode