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; }