罗马数字转整数
题目描述:
问题分析:
1.将字母与值进行映射;
2.合理分解字母;
3.本文使用最暴力的方法解决;
完整代码:
#include<iostream>
#include<string>
using namespace std;
int getvalue(string s)
{
string array[13] = {"IV", "IX", "XL", "XC", "CD", "CM", "I", "V", "X", "L", "C", "D", "M"};
int value[13] = {4, 9, 40, 90, 400, 900, 1, 5, 10, 50, 100, 500, 1000};
for (int i = 0; i < 13; i++)
{
if (s == array[i])
return value[i];
}
return -1;
}
int romanToInt(string s)
{
int sum = 0;
string temp = s;
while (!temp.empty())
{
int value1 = -1, value2 = -1;
string t, c;
if (temp.size() >= 2)
{
t = temp.substr(0,2);
value1 = getvalue(t);
}
c = temp.at(0);
value2 = getvalue(c);
if (value1 != -1)
{
sum += value1;
temp = temp.substr(2,temp.size());
}
else if (value2 != -1)
{
sum += value2;
temp = temp.substr(1,temp.size());
}
else
continue;
}
return sum;
}
int main()
{
string s;
while (cin >> s)
{
cout << romanToInt(s) << endl;
}
return 0;
}
结果展示:
因为没有考虑优化,用时90多毫秒,大家可以参考letcode本题目下的讨论,优化字符分解过程;