Roman to Integer

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

罗马数字中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

所以从左到右遍历,若右边的数字小于等于当前数,则加上当前数,若右边的数字大于等于当前数,则减去当前数

posted @ 2015-06-06 11:38  varcom  阅读(114)  评论(0编辑  收藏  举报