主要思路就是如果每两个字符进行一次判断,如果左边的字符所代表的字符小于右边的字符,则返回右边-左边的值。
要注意最后一个字符特殊处理,因为可能溢出。
//
// main.cpp
// Integer to Roman
//
// Created by zhukunjie on 14-7-8.
// Copyright (c) 2014年 zhukunjie. All rights reserved.
//
#include <iostream>
using namespace std;
inline int map(const char c)
{
switch (c) {
case 'I':return 1;break;
case 'V':return 5;break;
case 'X': return 10;break;
case 'L': return 50;break;
case 'C': return 100;break;
case 'D': return 500;break;
case 'M': return 1000;break;
default:return 0;break;
}
}
int romanToInt(string s) {
int res=0;
for(int i=0;i<s.length();i++)
{
if (i==(s.length()-1)) {
res+=map(s[i]);
}
else{
if (map(s[i])<map(s[i+1]))
{res+=map(s[i+1])-map(s[i]);i++;}
else res+=map(s[i]);
}
}
return res;
}
int main(int argc, const char * argv[])
{
// insert code here...
std::cout << romanToInt("IX");
return 0;
}