Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
I = 1;
V = 5
X = 10
L = 50
C = 100
D = 500
M = 100
class Solution {
public:
int romanToInt(string s)
{
if (s.size() == 0)
return 0;
int sum = 0;
map<char, int> mmap;
mmap.insert(pair<char, int>('I', 1));
mmap.insert(pair<char, int>('V', 5));
mmap.insert(pair<char, int>('X', 10));
mmap.insert(pair<char, int>('L', 50));
mmap.insert(pair<char, int>('C', 100));
mmap.insert(pair<char, int>('D', 500));
mmap.insert(pair<char, int>('M', 1000));
int pre = mmap[*s.end()];
for (int i=s.size()-1;i>=0;i--)
{
int cur = mmap[s[i]];
if ( cur < pre)
sum -= cur;
else
sum += cur;
pre = cur;
}
return sum;
}
};
测试
#include "head.h"
class Solution {
public:
int romanToInt(string s)
{
if (s.size() == 0)
return 0;
int sum = 0;
map<char, int> mmap;
mmap.insert(pair<char, int>('I', 1));
mmap.insert(pair<char, int>('V', 5));
mmap.insert(pair<char, int>('X', 10));
mmap.insert(pair<char, int>('L', 50));
mmap.insert(pair<char, int>('C', 100));
mmap.insert(pair<char, int>('D', 500));
mmap.insert(pair<char, int>('M', 1000));
int pre = mmap[*s.end()];
for (int i=s.size()-1;i>=0;i--)
{
int cur = mmap[s[i]];
if ( cur < pre)
sum -= cur;
else
sum += cur;
pre = cur;
}
return sum;
}
};
int main ()
{
Solution s;
string str("MCMLXXX");
cout<<s.romanToInt(str)<<endl;
}