SOGO論壇
  登入   註冊   找回密碼
查看: 4086|回覆: 0
列印 上一主題 下一主題

[程式設計] 請問數字跟羅馬字互換~~幾行看不懂~~求解! [複製連結]

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2016-11-20 16:46:01 |只看該作者 |倒序瀏覽
#include<iostream>
using namespace std;

int r2a( char ch )
{
  switch( ch ) {
    case 'I': return 1;
    case 'V': return 5;
    case 'X': return 10;
    case 'L': return 50;
    case 'C': return 100;
    case 'D': return 500;
    case 'M': return 1000;
    default: return 0;
  }
}

char a2r( int n )
{
  switch( n ) {
    case 1: return 'I';
    case 5: return 'V';
    case 10: return 'X';
    case 50: return 'L';
    case 100: return 'C';
    case 500: return 'D';
    case 1000: return 'M';
    default: return '\0';
  }
}

void roman( int m ){
  int remain, count,i;
  char ch;
  int a[] = {1,5,10,50,100,500,1000};
  remain = m;
  if( m==0 ) cout << "ZERO" ;
  i = 7;
  while(remain && i>0){
    i--;
    count = remain / a;
    ch = a2r(a);
    for( int j=0;j<count;j++) cout << ch;
    remain -= count * a;
    if ( remain < a- (i==0 ? 0 : a[i-(i%2?1:2)]) ) continue;
    if( remain >= a - 1) {
     cout << 'I' << ch ;
     remain -= (a-1);
    }else if( remain >= a-10){
     cout << 'X' << ch ;
     remain -= (a-10);
    }else if( remain >= a -100){
     cout << 'C' << ch ;
     remain -= (a-100);

    }
  }
}

int main()
{
  int r;
  cout << "Input a number(I,V,X,L,C,D,M來代表1,5,10,50,100,500,1000):";
  cin >> r;
  roman(r);
  return 0;
}


有大哥大姐可以簡單解釋紅色字的用途嗎?  
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-11-11 19:45

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部