Advertisement
uopspop

NumToStr strintToNum

Apr 19th, 2016
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.36 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;
  7. using std::string;
  8.  
  9. int convertToNum(char c);
  10. char convertToChar(int i);
  11. int cal_gap(int a_i, int b_i);
  12. string numberToString(int gap);
  13.  
  14. int main(){
  15.  
  16.     while(1){
  17.  
  18.         string a_s, b_s;
  19.         int a_i = 0, b_i = 0;
  20.  
  21.         cin >> a_s;
  22.         if (a_s == "#") {
  23.             break;
  24.         }// get out point      
  25.         cin >> b_s;
  26.  
  27. // convert string to number
  28.         for(int i = 0; a_s[i] != '\0'; i++){
  29.             //a_i += convertToNum(a_s[i]);
  30.             if (convertToNum(a_s[i]) >= convertToNum(a_s[i+1])){
  31.                 a_i += convertToNum(a_s[i]);
  32.             }else{
  33.                 a_i -= convertToNum(a_s[i]);
  34.             }
  35.         }
  36.         for(int i = 0; b_s[i] != '\0'; i++){
  37.             if (convertToNum(b_s[i]) >= convertToNum(b_s[i+1])){
  38.                 b_i += convertToNum(b_s[i]);
  39.             }else{
  40.                 b_i -= convertToNum(b_s[i]);
  41.             }
  42.         }
  43.        
  44.     //  cout << "a_i: " << a_i << endl; // debugging
  45.     //  cout << "b_i: " << b_i << endl; //debugging
  46.  
  47. // calculate the gap between two numbers
  48.         int gap = cal_gap(a_i,b_i);
  49.     //  cout << "gap: "<< gap << endl; // debugging
  50.         if (gap == 0){
  51.             cout << "ZERO" << endl;
  52.             continue;
  53.         }else{
  54.             string ans;
  55.             ans = numberToString(gap);
  56.             cout << ans << endl;
  57.         }// end of if
  58.     }// end of while
  59.  
  60.    
  61. }// end of main
  62.  
  63. string numberToString(int gap){
  64.     string stringTmp;
  65.     switch(gap/1000){
  66.         case 0:
  67.             break;
  68.         case 1:
  69.             stringTmp += "M";
  70.             break;
  71.         case 2:
  72.             stringTmp += "MM";
  73.             break;
  74.         case 3:        
  75.             stringTmp += "MMM";
  76.             break;
  77.     }  
  78.  
  79.     switch(gap%1000/100){
  80.         case 9:
  81.             stringTmp += "CM";
  82.             break;
  83.         case 8:
  84.             stringTmp += "DCCC";
  85.             break;
  86.         case 7:
  87.             stringTmp += "DCC";
  88.             break;
  89.         case 6:
  90.             stringTmp += "DC";
  91.             break;
  92.         case 5:
  93.             stringTmp += "D";
  94.             break;
  95.         case 4:
  96.             stringTmp += "CD";
  97.             break;
  98.         case 3:
  99.             stringTmp += "CCC";
  100.             break;
  101.         case 2:
  102.             stringTmp += "CC";
  103.             break;
  104.         case 1:
  105.             stringTmp += "C";
  106.             break;
  107.  
  108.  
  109.     }  
  110.  
  111.     switch(gap%1000%100/10){
  112.         case 9:
  113.             stringTmp += "XC";
  114.             break;
  115.         case 8:
  116.             stringTmp += "LXXX";
  117.             break;
  118.         case 7:
  119.             stringTmp += "LXX";
  120.             break;
  121.         case 6:
  122.             stringTmp += "LX";
  123.             break;
  124.         case 5:
  125.             stringTmp += "L";
  126.             break;
  127.         case 4:
  128.             stringTmp += "XL";
  129.             break;
  130.         case 3:
  131.             stringTmp += "XXX";
  132.             break;
  133.         case 2:
  134.             stringTmp += "XX";
  135.             break;
  136.         case 1:
  137.             stringTmp += "X";
  138.             break;
  139.     }  
  140.     switch(gap%1000%100%10/1){
  141.         case 9:
  142.             stringTmp += "IX";
  143.             break;
  144.         case 8:
  145.             stringTmp += "VIII";
  146.             break;
  147.         case 7:
  148.             stringTmp += "VII";
  149.             break;
  150.         case 6:
  151.             stringTmp += "VI";
  152.             break;
  153.         case 5:
  154.             stringTmp += "V";
  155.             break;
  156.         case 4:
  157.             stringTmp += "IV";
  158.             break;
  159.         case 3:
  160.             stringTmp += "III";
  161.             break;
  162.         case 2:
  163.             stringTmp += "II";
  164.             break;
  165.         case 1:
  166.             stringTmp += "I";
  167.             break;
  168.     }
  169.  
  170.     return stringTmp;
  171. }
  172.  
  173.  
  174. int convertToNum(char c){
  175.     switch(c){
  176.     case 'I':
  177.        return 1;
  178.        break; //optional
  179.     case 'V':
  180.        return 5;
  181.        break; //optional
  182.     case 'X':
  183.        return 10;
  184.        break; //optional
  185.     case 'L':
  186.        return 50;
  187.        break; //optional
  188.     case 'C':
  189.        return 100;
  190.        break; //optional
  191.     case 'D':
  192.        return 500;
  193.        break; //optional
  194.     case 'M':
  195.        return 1000;
  196.        break; //optional
  197.     }// end of switch
  198.    
  199. }
  200.  
  201.  
  202. int cal_gap(int a_i, int b_i){
  203.     return abs((a_i - b_i));   
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement