Pabon_SEC

Roman Numerals

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