VasilM

int_to_roman_to_int_converter

May 24th, 2013
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.13 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <string>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. string intToRoman(int n)
  9. {
  10.   string temp="\0";
  11.  
  12.   while(n>0){
  13.              if(n>999){
  14.                        n-=1000;
  15.                        temp += "M";
  16.              }else if(n>899){
  17.                        n-=900;
  18.                        temp += "CM";
  19.              }else if(n>499){
  20.                        n-=500;
  21.                        temp += "D";
  22.              }else if(n>399){
  23.                        n-=400;
  24.                        temp += "CD";
  25.              }else if(n>99){
  26.                        n-=100;
  27.                        temp += "C";
  28.              }else if(n>89){
  29.                        n-=90;
  30.                        temp += "XC";
  31.              }else if(n>49){
  32.                        n-=50;
  33.                        temp += "L";
  34.              }else if(n>39){
  35.                        n-=40;
  36.                        temp += "XL";
  37.              }else if(n>9){
  38.                        n-=10;
  39.                        temp += "X";
  40.              }else if(n>8){
  41.                        n-=9;
  42.                        temp += "IX";
  43.              }else if(n>4){
  44.                        n-=5;
  45.                        temp += "V";
  46.              }else if(n>3){
  47.                        n-=4;
  48.                        temp += "IV";
  49.              }else if(n>=1){
  50.                        n--;
  51.                        temp += "I";
  52.              }
  53.              
  54.   }
  55.  
  56.   return (temp);
  57. }
  58.  
  59.  
  60.  
  61. int romanToInt(string str)
  62. {
  63.     //Make sure your string is uppercase
  64.     for(unsigned int i=0;i<str.length();i++)
  65.    {
  66.       str[i] = toupper(str[i]);
  67.    }
  68.    
  69.      
  70.      int sum=0;
  71.      
  72.    for(unsigned int i=0;i<str.length();i++)
  73.    {
  74.                
  75.                switch(str[i]){
  76.                           case 'M':
  77.                                sum += 1000;
  78.                           break;
  79.                           case 'D':
  80.                                sum += 500;
  81.                           break;                          
  82.                           case 'C':
  83.                                sum = (str[i+1]=='M' || str[i+1]=='D')? sum-100 : sum+100;
  84.                           break;
  85.                           case 'L':
  86.                                sum += 50;
  87.                           break;  
  88.                           case 'X':
  89.                                sum = (str[i+1]=='C' || str[i+1]=='L')? sum-10 : sum+10;
  90.                           break;
  91.                           case 'V':
  92.                                sum = (str[i+1]=='X' || str[i+1]=='L')? sum-5 : sum+5;
  93.                           break;
  94.                           case 'I':
  95.                                sum = (str[i+1]=='X' || str[i+1]=='V')? sum-1 : sum+1;
  96.                           break;                                                                                                      
  97.                              
  98.                }
  99.    }
  100.    return sum;
  101. }
  102.  
  103.  
  104.  
  105. int main()
  106. {
  107.  
  108.    string s = "MmMCVLXii"; //We will uppercase this
  109.    
  110.    cout << romanToInt(s) << endl;
  111.    cout << intToRoman(romanToInt(s)) << endl;
  112.  
  113.    system("PAUSE");
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment