24h購物| | PChome| 登入
2009-08-12 22:02:44| 人氣1,299| 回應0 | 上一篇 | 下一篇

97全國能力縣賽 1. 羅馬數字

推薦 0 收藏 0 轉貼0 訂閱站台

順便做了兩個轉換的涵式

/*****************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char x[20];
void Romanin(int m)
{
  int a,X=0;
   for(a=0;a<m;a++)
    {
     if(x[a]=='I')
       X+=1;
     if(x[a]=='V')
      {
       X+=5;
       if(a!=0&&x[a-1]=='I')
        X-=2;
      }
      if(x[a]=='X')
      {
       X+=10;
       if(a!=0&&x[a-1]=='I')
         X-=2;
       if(a!=0&&x[a-1]=='V')
         X-=10;
      }
      if(x[a]=='L')
      {
        X+=50;
       if(a!=0&&x[a-1]=='I')
        X-=2;
       if(a!=0&&x[a-1]=='V')
        X-=10;
       if(a!=0&&x[a-1]=='X')
        X-=20;
      }
      if(x[a]=='C')
      {
       X+=100;
       if(a!=0&&x[a-1]=='I')
         X-=2;
       if(a!=0&&x[a-1]=='V')
         X-=10;
       if(a!=0&&x[a-1]=='X')
         X-=20;
       if(a!=0&&x[a-1]=='L')
         X-=100;
       }
      if(x[a]=='D')
      {
       X+=500;
       if(a!=0&&x[a-1]=='I')
        X-=2;
       if(a!=0&&x[a-1]=='V')
        X-=10;
       if(a!=0&&x[a-1]=='X')
        X-=20;
       if(a!=0&&x[a-1]=='L')
        X-=100;
       if(a!=0&&x[a-1]=='C')
        X-=200;
      }
     if(x[a]=='M')
     {
      X+=1000;
      if(a!=0&&x[a-1]=='I')
        X-=2;
      if(a!=0&&x[a-1]=='V')
         X-=10;
      if(a!=0&&x[a-1]=='X')
        X-=20;
      if(a!=0&&x[a-1]=='L')
        X-=100;
      if(a!=0&&x[a-1]=='C')
        X-=200;
      if(a!=0&&x[a-1]=='D')
        X-=1000;
     }
    }
   printf("%d\n",X);
}
void Romanout(int X)
{
   if(X/1000>0)
      {
       if(X/1000==4)
        printf("MMMM");
       if(X/1000==3)
        printf("MMM");
       if(X/1000==2)
        printf("MM");
       if(X/1000==1)
       printf("M");  
       X=X-X/1000*1000;
      }
     if(X/100>0)
      {
       if(X/100==9)
        printf("CM");
       if(X/100==8)
        printf("DCCC");
       if(X/100==7)
        printf("DCC");
       if(X/100==6)
       printf("DC");
       if(X/100==5)
        printf("D");
       if(X/100==4)
        printf("CD");
       if(X/100==3)
        printf("CCC");
       if(X/100==2)
        printf("CC");
       if(X/100==1)
       printf("C");  
       X=X-X/100*100;
      }
     if(X/10>0)
      {
       if(X/10==9)
        printf("XC");
       if(X/10==8)
        printf("LXXX");
       if(X/10==7)
        printf("LXX");
       if(X/10==6)
       printf("LX");
       if(X/10==5)
        printf("L");
       if(X/10==4)
        printf("XL");
       if(X/10==3)
        printf("XXX");
       if(X/10==2)
        printf("XX");
       if(X/10==1)
       printf("X");  
       X=X-X/10*10;
      }
     if(X>0)
      {
       if(X==9)
        printf("IX");
       if(X==8)
        printf("VIII");
       if(X==7)
        printf("VII");
       if(X==6)
       printf("VI");
       if(X==5)
        printf("V");
       if(X==4)
        printf("IV");
       if(X==3)
        printf("III");
       if(X==2)
        printf("II");
       if(X==1)
       printf("I");  
      } 
     printf("\n");
}
main()
{
 int n,m,a,num;
 while(scanf("%d",&n)==1)
     for(a=0;a<n;a++)
        {
           scanf("%d",&m);
           if(m==1)
              {scanf("%s",x);Romanin(strlen(x));}
           else
              {scanf("%d",&num);Romanout(num);}  
        }
 return 0;
}

台長: 來源不明
人氣(1,299) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:94北縣賽-2-數獨問題 (Sudoku)
此分類上一篇:ACM 10637 Q10637: Coprimes

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文