C题目来源:leetcode
题目描述:
Roman numerals are represented by seven different symbols: I
, V
, X
, L
, C
, D
and M
.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000
For example, two is written as II
in Roman numeral, just two one's added together. Twelve is written as, XII
, which is simply X
+ II
. The number twenty seven is written as XXVII
, which is XX
+ V
+ II
.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII
. Instead, the number four is written as IV
. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX
. There are six instances where subtraction is used:
I
can be placed beforeV
(5) andX
(10) to make 4 and 9.X
can be placed beforeL
(50) andC
(100) to make 40 and 90.C
can be placed beforeD
(500) andM
(1000) to make 400 and 900.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
1 enum {//罗马对应的数字 2 I=1, 3 V=5, 4 X=10, 5 L=50, 6 C=100, 7 D=500, 8 M=1000 9 }; 10 class Solution { 11 public: 12 int romanToInt(string s) { 13 int get(char); 14 int sum=0; 15 for(int i=0;i<s.size();++i) 16 { 17 int a=get(s[i]),b=get(s[i+1]); 18 if(a>=b) sum+=a; 19 else {sum+=(b-a);++i;} 20 } 21 return sum; 22 23 } 24 }; 25 int get(char ch)//将字符串转换成数字 26 { 27 int m; 28 switch(ch) 29 { 30 case 'I':m=I;break; 31 case 'V':m=V;break; 32 case 'X':m=X;break; 33 case 'L':m=L;break; 34 case 'C':m=C;break; 35 case 'D':m=D;break; 36 case 'M':m=M;break; 37 } 38 return m; 39 }
其实枚举在这里就是一个替代功能,直接用数字也行。
17:01:56 2018-09-05@jm_epiphany