a013

輸入說明 :

每個輸入檔中會有一個或以上的測試資料。每一行由兩個數字組成一筆測

試資料,且所有數字將會小於4,000。檔案最後會以符號 # 表示結束。

輸出說明 :

每筆測試資料的答案必須輸出到檔案中,並且換行。如果答案為零,則須 輸出字串ZERO。

這題那時候再寫的時候,寫了大概四小時,還是一邊照著這篇刻的情況下

I=1

V=5

X=10

L=50

C=100

D=500

M=1,000

數字轉羅馬: 遇到1000,900,500,400,100,90,50,40,10,9,5,4,1要換成特定的羅馬字,我的寫法在1000,100,10,1那邊因為會出現很多次所以要用while來寫

羅馬轉成數字:要先考慮900,400,90,40,9,4的情形,遇到的話要先扣小的一次,比方說遇到"CM",我的值是900,但是我讀陣列想要一個一個加,所以我讀到'C'先-100,等等我讀到'M'+1000,還是等於遇到'CM'加900

要用絕對值abs 前面要把math.h ,include進去

#include<stdio.h>
#include<math.h>
#include<string.h>
int char_to_number(char []);
int main(){
    int  dif;

    char array1 [30]={'\0'};
    char array2 [30]={'\0'};
    while(scanf("%s",array1)!=EOF)
    {
         char s[30]={0};

         if(array1[0]=='#')
             break;

         scanf("%s",array2);

         dif=abs(char_to_number(array1)-char_to_number(array2));

         if(dif==0)

         printf("ZERO\n");


         else
         {
             int i=0;
            while(dif>=1000)
            {
                dif-=1000;
                 s[i]='M';
                 i++;
            }
            if(dif>=900)
            {
                 dif-=900;
                 s[i]='C';
                 s[i+1]='M';
                 i+=2;
            }
            if(dif>=500)
            {
                 dif-=500;    
                 s[i]='D';
                 i++;    
            }
            if(dif>=400)
             {
                  dif-=400;
                  s[i]='C';
                  s[i+1]='D';
                  i+=2;        
             } 
            while(dif>=100)
            {
                 dif-=100;
                 s[i]='C';
                 i++;
            }
            if(dif>=90)
            {
                 dif-=90;
                 s[i]='X';
                 s[i+1]='C';
                 i+=2;
            }
            if(dif>=50)
            {
                 dif-=50;    
                 s[i]='L';
                 i++;    
            }
            if(dif>=40)
             {
                  dif-=40;
                  s[i]='X';
                  s[i+1]='L';
                  i+=2;        
             } 

             while(dif>=10)
            {
                 dif-=10;
                 s[i]='X';
                 i++;
            }
            if(dif>=9)
            {
                 dif-=9;
                 s[i]='I';
                 s[i+1]='X';
                 i+=2;
            }
            if(dif>=5)
            {
                 dif-=5;    
                 s[i]='V';
                 i++;    
            }
            if(dif>=4)
             {
                  dif-=4;
                  s[i]='I';
                  s[i+1]='V';
                  i+=2;        
             } 
             while(dif>=1)
            {
                 dif-=1;
                 s[i]='I';
                 i++;
            }
         }
         printf("%s\n",s);      
   } 
return 0;            
}


int char_to_number(char s[])
{
    int sum=0;
    int i;
    for(i=0;i<strlen(s);i++){
        if(s[i]=='C'&&s[i+1]=='M')
          { sum-=100; }    
        else if(s[i]=='C'&&s[i+1]=='D')
          { sum-=100; }
        else if(s[i]=='X'&&s[i+1]=='C')
          { sum-=10; }
        else if(s[i]=='X'&&s[i+1]=='L')
          { sum-=10; }
        else if(s[i]=='I'&&s[i+1]=='X')
          { sum-=1; }
        else if(s[i]=='I'&&s[i+1]=='V')
          { sum-=1; }
        else if(s[i]=='I')
          { sum+=1; }
        else if(s[i]=='V')
          { sum+=5; }
        else if(s[i]=='X')
          { sum+=10; }
        else if(s[i]=='L')
          { sum+=50; }
        else if(s[i]=='C')
          { sum+=100; }
        else if(s[i]=='D')
          { sum+=500; }
        else if(s[i]=='M')
          { sum+=1000; }   
    }
    return sum;        
}