#11834: 通過的案例,可參考


alun0922 (新手)

學校 : 國立交通大學
編號 : 9161
來源 : [106.104.75.98]
最後登入時間 :
2021-11-14 09:48:47
a013. 羅馬數字 -- NPSC 模擬試題 | From: [112.105.82.54] | 發表日期 : 2017-03-23 16:58

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int cal(char inp[]){

int thousand=0 ,hundred=0 ,ten=0 ,digit=0 ;  //四個狀態變數,紀錄累加數值
int tr;
for(tr=0;0!=inp[tr];++tr){

switch(inp[tr]){                      //用switch判斷讀到的字,由下往上看應該比校好懂
case 'M':{
if(1==hundred) hundred=9;  //前面出現過一個C,代表CM
else ++thousand;                  //千位數加一
}break;

case 'D':{
if(1==hundred) hundred=4; //前面出現過一個C,代表CD
else hundred=5;                   //D單獨出現,百位數從5開始數
}break;

case 'C':{
if(1==ten) ten=9;       //前面出現過一個X,代表XC
else ++hundred;         //百位數加一
}break;

case 'L':{
if(1==ten) ten=4;       //前面出現過一個X,代表XL
else ten=5;                 //L單獨出現,十位數從5開始數
}break;

case 'X':{
if(1==digit) digit=9;     //前面出現過一個I,代表IX
else ++ten;                 //十位數加一
}break;

case 'V':{
if(1==digit) digit=4;     //前面出現過一個I,代表IV
else digit=5;                 //V單獨出現,個位數從5開始數
}break;

case 'I':{
++digit;                       //個位數加一
}
}
}
return thousand*1000 + hundred*100 + ten*10 + digit;
}

 

 

int main(){

char *a,*b;
char inp[64];

char *thousand[4]={"","M","MM","MMM"};
char *hundred[10]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char *ten[10] ={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char *digit[10] ={"","I","II","III","IV","V","VI","VII","VIII","IX"};


while(gets(inp)){
a=strtok(inp," ");
if('#'==a[0]) break;

b=strtok(NULL," ");

int na=cal(a);
int nb=cal(b);
// printf("%d %d\n",na,nb);

int sub=(na>=nb)? na-nb : nb-na;   //差的絕對值
if(0==sub) {
printf("ZERO\n");
continue;
}

 

//用字串陣列和取餘數換算成符號

printf("%s",thousand[sub/1000]); sub%=1000;
printf("%s",hundred[sub/100]); sub%=100;
printf("%s",ten[sub/10]); sub%=10;
printf("%s\n",digit[sub]);

}
return 0;
}

 
#13164: Re:通過的案例,可參考


vm3xk4xk4@gmail.com (邊緣人求組隊)

學校 : 不指定學校
編號 : 73895
來源 : [118.171.27.234]
最後登入時間 :
2017-12-20 18:31:58
a013. 羅馬數字 -- NPSC 模擬試題 | From: [118.171.27.234] | 發表日期 : 2017-12-23 23:32

 

 


好厲害的寫法!!!

請受小弟一拜((跪

 
ZeroJudge Forum