Roman to Integer
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int i,len=s.size(); 5 int dig[20]; 6 for(i=0;i<len;i++) 7 { 8 if(s[i]=='I') 9 dig[i]=1; 10 if(s[i]=='V') 11 dig[i]=5; 12 if(s[i]=='X') 13 dig[i]=10; 14 if(s[i]=='L') 15 dig[i]=50; 16 if(s[i]=='C') 17 dig[i]=100; 18 if(s[i]=='D') 19 dig[i]=500; 20 if(s[i]=='M') 21 dig[i]=1000; 22 } 23 int ans=0,cur=dig[0]; 24 for(i=1;i<len;i++) 25 { 26 if(dig[i]<=dig[i-1]) 27 { 28 ans+=cur; 29 } 30 else 31 { 32 ans-=cur; 33 } 34 cur=dig[i]; 35 } 36 ans+=cur; 37 return ans; 38 } 39 };
罗马数字中I =1, V=5,X=10, L=50, C=100,D=500,M=1000;
小数字放在大数字右边是相加,如VII是7,小数字放在大数字左边是相减,如IX=9。
根据数字的组成原则,先表示大数字,在表示小数字,如3999,先表示3000 MMM,再表示900 CM,再表示90 XC,再表示9 IX
所以从左到右遍历,若右边的数字小于等于当前数,则加上当前数,若右边的数字大于等于当前数,则减去当前数