1 int r2n(char *str)
 2 {
 3     int re, pre;
 4     re = pre = mp[str[0]];
 5     for(int i = 1; str[i]; i++)
 6     {
 7         if(mp[str[i]] <= pre) re += mp[str[i]];
 8         else re = re - 2 * pre + mp[str[i]];
 9         pre = mp[str[i]];
10     }
11     return re;
12 }
13 
14 string n2r(int k)
15 {
16     int i = 0;
17     string re = "";
18     while(k > 0)
19     {
20         while(k >= val[i])
21         {
22             re += r[i];
23             k -= val[i];
24         }
25         i++;
26     }
27     return re;
28 }

Exercise : UVa759 ( Memoization/Prepocessing )