# Leetcode 13. Roman to Integer (C語言) - 題目 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. - 範例 ``` Example 1: Input: "III" Output: 3 Example 2: Input: "IV" Output: 4 Example 3: Input: "IX" Output: 9 Example 4: Input: "LVIII" Output: 58 Explanation: L = 50, V= 5, III = 3. Example 5: Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. ``` ```c int cal1(char c){ switch(c){ case 'I':return 1; case 'V':return 5; case 'X':return 10; case 'L':return 50; case 'C':return 100; case 'D':return 500; case 'M':return 1000; } return 0; } int romanToInt(char * s){ int i,length=strlen(s),temp=0,val=0; for(i=0;i<length;i++){ if(i==length-1){ val+=cal1(s[i]); break; } if((temp=cal1(s[i+1])-cal1(s[i]))>0){ val+=temp; i++; temp=0; continue; } val+=cal1(s[i]); } return val; } ``` 思路:羅馬數字正常由大到小排列(M>D>C>L>X>V>I),一但有小到大的情況發生(e.g. IV,IX),這時候就把後者減前者(IV=5-1=4)。