Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有“0”,与进位制无关。
- 重复数次:一个罗马数字重复几次,就表示这个数的几倍。
- 右加左减:
- 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
- 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字
#include <iostream> #include <map> #include <string> using namespace std; int romanToInt(string s){ int length = s.length(); if (length < 1) return 0; map<int,int> romanMap; romanMap['I'] = 1; romanMap['V'] = 5; romanMap['X'] = 10; romanMap['L'] = 50; romanMap['C'] = 100; romanMap['D'] = 500; romanMap['M'] = 1000; int index = length - 1 , sum = romanMap[s[index]]; while (--index >= 0) { if (romanMap[s[index+1]] >romanMap[s[index]]) sum -= romanMap[s[index]]; else sum += romanMap[s[index]]; } return sum; } int main(){ cout<<romanToInt("DCXXI")<<endl; return 0; }