面试题36:罗马数和阿拉伯数的相互转换

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         unordered_map<char,int> m;
 5         m['I'] = 1;
 6         m['V'] = 5;
 7         m['X'] = 10;
 8         m['L'] = 50;
 9         m['C'] = 100;
10         m['D'] = 500;
11         m['M'] = 1000;
12 
13         int res = 0;
14         int pre = 0;
15         int len = s.length();
16         for(int i=len-1;i>=0;i--){
17             int a = m[s[i]];
18             if(a >= pre){
19                 pre = a;
20                 res += a;
21             }else{
22                 pre = a;
23                 res -= a;
24             }
25         }
26         return res;
27     }
28 };
29 class Solution {
30 public:
31     string intToRoman(int num) {
32         char* c[4][10]={
33             {"","I","II","III","IV","V","VI","VII","VIII","IX"},
34             {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
35             {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
36             {"","M","MM","MMM"}
37         };
38         string roman;
39         roman.append(c[3][num / 1000 % 10]);
40         roman.append(c[2][num / 100 % 10]);
41         roman.append(c[1][num / 10 % 10]);
42         roman.append(c[0][num % 10]);
43         
44         return roman;
45     }
46 };
原文地址:https://www.cnblogs.com/wxquare/p/6912252.html