#19889: 請問為甚麼會RE?


frakw (frakw)

學校 : 國立臺中高級工業職業學校
編號 : 109736
來源 : [140.118.157.60]
最後登入時間 :
2023-03-21 19:23:23
a013. 羅馬數字 -- NPSC 模擬試題 | From: [140.118.74.17] | 發表日期 : 2019-11-06 22:16

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

const char loma[7]={'I','V','X','L','C','D','M'};
const int value[7]={1, 5 ,10 ,50,100,500,1000};
int lomatoint(char[]);
char* inttoloma(int);
int main(void) {
int test,i,j,k;
char a[100],b[100],temp;
temp=getchar();
while(temp!='#'){
i=0;
j=0;
memset(a,0,strlen(a));
memset(b,0,strlen(b));
while(temp!=' ' && temp!='#'){
a[i++]=temp;
temp=getchar();
}
temp=getchar();//把空白取代
while(temp!='\n' && temp!='#'){
b[j++]=temp;
temp=getchar();
}
if(temp=='#') break;
k=lomatoint(a)-lomatoint(b);
//printf("%d-%d=%d\n",lomatoint(a),lomatoint(b),k);
if(k<0){
k*=-1;
}
elseif(k==0){
printf("ZERO\n");
temp=getchar();
continue;
}
printf("%s\n",inttoloma(k));
temp=getchar();
}
return0;
}

int lomatoint(char a[]){
int x=0,i,j,judge[100],k=0;
for(i=0;i<(int)strlen(a);i++){
for(j=0;j<7;j++){
if(a[i]==loma[j]){
judge[k++]=value[j];
break;
}
}
}
for(i=0;i<(int)strlen(a)-1;i++){
if(judge[i]<judge[i+1]){
judge[i]*=-1;
}
}
for(i=0;i<(int)strlen(a);i++){
x+=judge[i];
}
return x;
}

char* inttoloma(int a){
staticchar ch[100];
memset(ch,0,strlen(ch));
int i,j=0,x,digit[4],num=-1,k;
while(a){
digit[++num]=a%10;
a/=10;
}
for(i=num;i>=0;i--){
if(digit[i]==4 || digit[i]==9){
ch[j++]=loma[i*2];
ch[j++]=digit[i]==4?loma[i*2+1]:loma[i*2+2];//*
}
else{
if(digit[i]>4){
ch[j++]=loma[i*2+1];
digit[i]-=5;
}
while(digit[i]){
ch[j++]=loma[i*2];
digit[i]--;
}
}
}
return ch;
}
 
ZeroJudge Forum