参考《one-day-one-leetcode》
在上篇博客中我们讨论了将1~3999以内的数字转化为罗马数字,着重讨论了非7个标准的罗马数字的一些表达,例如4,6,3等等的表达,这篇博客我们着讨论一下将罗马数字转化为整型数字的情况!
其实我们在进行转化的时候主要注意一下4,40,400,等数字的表达即可!
代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int toNum(char ch);
int romanToInt(string s){
int ret = 0;
int i = 0;
while ( i < s.length()){
if (i + 1 < s.length() && toNum(s[i]) < toNum(s[i + 1])){
ret += toNum(s[i + 1]) - toNum(s[i]);
i++;
}
else{
ret += toNum(s[i]);
}
i++;
}
return ret;
}
int toNum(char ch){
int num = 0;
switch (ch){
case 'I':num = 1; break;
case 'V':num = 5; break;
case 'X':num = 10; break;
case 'L':num = 50; break;
case 'C':num = 100; break;
case 'D':num = 500; break;
case 'M':num = 1000; break;
}
return num;
}
int main(){
string s = "MMMDCCLXXII";
int con = romanToInt(s);
cout << con << endl;
return 0;
}
运行结果: