Advertisement
uopspop

Untitled

Apr 19th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. #include<cstdlib>
  4. using namespace std;
  5. int rtN(char a);
  6. int RtN(char rn[20]);
  7.  
  8. void NtR(int n);
  9. struct rom{int n;  string sy;};
  10.  
  11. rom rsy[13];
  12.  
  13. int main()
  14.   {
  15.   rsy[0].n=1000;rsy[0].sy="M";
  16.   rsy[1].n=900;rsy[1].sy="CM";
  17.   rsy[2].n=500;rsy[2].sy="D";
  18.   rsy[3].n=400;rsy[3].sy="CD";
  19.   rsy[4].n=100;rsy[4].sy="C";
  20.   rsy[5].n=90;rsy[5].sy="XC";
  21.   rsy[6].n=50;rsy[6].sy="L";
  22.   rsy[7].n=40;rsy[7].sy="XL";
  23.   rsy[8].n=10;rsy[8].sy="X";
  24.   rsy[9].n=9;rsy[9].sy="IX";
  25.   rsy[10].n=5;rsy[10].sy="V";
  26.   rsy[11].n=4;rsy[11].sy="IV";
  27.   rsy[12].n=1;rsy[12].sy="I";
  28.  
  29.   char n1[20],n2[20];
  30.   while(cin>>n1)
  31.       {
  32.       if(n1[0]!='#') {cin>>n2; NtR(abs(RtN(n1)-RtN(n2)));}
  33.       else return 0;
  34.       }
  35.   }
  36.  
  37. /////////////////////////////////////////////////////////////////
  38. int RtN(char rn[20])                                                //羅馬字串轉成一般文字
  39.   {                                                                        //MDCDXVIII ->1918
  40.   int n=0;
  41.   for(int k=strlen(rn)-1;k>=0;k--)
  42.     {
  43.     if(rtN(rn[k])<rtN(rn[k+1])) n=n-rtN(rn[k]);
  44.     else n=n+rtN(rn[k]);
  45.     }
  46.   return n;
  47.   }
  48. //////////////////////////////////////////////////////////////////
  49. int rtN(char a)                                                         //羅馬字元轉數字
  50.   {                                                                         //V -> 5
  51.   switch(int(a))
  52.        {
  53.        case 67:
  54.        return 100;
  55.        case 68:
  56.        return 500;
  57.        case 73:
  58.        return 1;
  59.        case 76:
  60.        return 50;
  61.        case 77:
  62.        return 1000;
  63.        case 86:
  64.        return 5;
  65.        case 88:
  66.        return 10;
  67.        default:
  68.        return 0;
  69.        }
  70.   }
  71. //////////////////////////////////////////////////////////////////////
  72. void NtR(int n)                                                              //數字轉羅馬數字
  73.    {
  74.    if(n==0) {cout<<"ZERO"<<endl;return;}
  75.    for(int k=0;k<13;k++)
  76.       {
  77.       if(n/rsy[k].n!=0){cout << "now n: " << n << endl; cout<<rsy[k].sy << endl;n-=rsy[k].n;k--;  }
  78.       }
  79.    cout<<endl;
  80.    return ;
  81.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement