Pabon_SEC

The Return of the Roman Empire

Apr 17th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. map<int,string>DecimalToRoman;
  6.  
  7. map<string,int>mp;
  8.  
  9. string s,R;
  10.  
  11. void DtoR(int value)
  12. {
  13.     DecimalToRoman[1000] = "M";
  14.     DecimalToRoman[900] = "CM";
  15.  
  16.     DecimalToRoman[500] = "D";
  17.     DecimalToRoman[400] = "CD";
  18.  
  19.     DecimalToRoman[100] = "C";
  20.     DecimalToRoman[90] = "XC";
  21.  
  22.     DecimalToRoman[50] = "L";
  23.     DecimalToRoman[40] = "XL";
  24.  
  25.     DecimalToRoman[10] = "X";
  26.     DecimalToRoman[9] = "IX";
  27.  
  28.     DecimalToRoman[5] = "V";
  29.     DecimalToRoman[4] = "IV";
  30.  
  31.     DecimalToRoman[1] = "I";
  32.  
  33.     int n = value;
  34.  
  35.     map<int,string>::reverse_iterator it;
  36.  
  37.     s = "";
  38.  
  39.     for(it = DecimalToRoman.rbegin(); it!=DecimalToRoman.rend(); it++)
  40.     {
  41.         while(value>=it->first)
  42.         {
  43.             s+=(string) it->second;
  44.  
  45.             value-=it->first;
  46.         }
  47.     }
  48.  
  49.     mp[s] = n;
  50. }
  51.  
  52. void init()
  53. {
  54.     for(int i=1; i<4000; i++)
  55.     {
  56.         DtoR(i);
  57.     }
  58.  
  59.     return ;
  60. }
  61.  
  62. int main()
  63. {
  64.     init();
  65.  
  66.     while(cin>>R)
  67.     {
  68.         if (mp.count(R))
  69.         {
  70.             printf("%d\n", mp[R]);
  71.         }
  72.         else
  73.         {
  74.             puts("This is not a valid number");
  75.         }
  76.     }
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment