#9718: TEL 想哭QAQ


a12345678665 (marktohark)

學校 : 國立虎尾科技大學
編號 : 48059
來源 : [49.213.194.197]
最後登入時間 :
2019-07-11 10:50:36
a013. 羅馬數字 -- NPSC 模擬試題 | From: [123.110.238.4] | 發表日期 : 2015-03-14 21:53

#include <string>
#include <iostream>
using namespace std;
int NewC(char *A);//將羅馬轉數字
int NewM(char A);//查看羅馬對應數字
string MtoN(int A);//將數字轉羅馬
char Q[16],W[16];
int main(void) 
string M;
int K;
while(1)
{
cin>>Q;
if(Q[0]=='#'){;break;}
cin>>W;
K=NewC(Q)-NewC(W);
if(K==0){printf("ZERO");}
else
M=MtoN(K);
cout<<M<<endl;
M="";
}
return 0;
int NewC(char *A)
{
int i=0;
int count[2]={0},k=0;
count[0]=NewM(A[i]);
L1:;
if(A[++i]=='\0')
{k+=NewM(A[--i]);goto L2;}
count[1]=NewM(A[i]);
if(count[0]>=count[1])
{k+=count[0];}
else
{k-=count[0];}
count[0]=count[1];
goto L1;
L2:;
 return k;
}
int NewM(char A)
{

switch(A)
{
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;
}
return 0;
}
string MtoN(int A)
{
string P="";
while(A!=0)
{
if(A>=1000)
{
A-=1000;
P+="M";
}
else if(A>=900)
{

A-=900;
P+="CM";
}
else if(A>=500)
{
A-=500;
P+="D";
}
else if(A>=400)
{
A-=400;
P+="CD";
}
else if(A>=100)
{
A-=100;
P+="C";
}
else if(A>=90)
{
A-=90;
P+="XC";
}
else if(A>=50)
{
A-=50;
P+="L";
}
else if(A>=40)
{
A-=40;
P+="XL";
}
else if(A>=10)
{

A-=10;
P+="X";
}
else if(A>=9)
{
A-=9;
P+="IX";
}
else if(A>=5)
{
A-=5;
P+="V";
}
else if(A>=4)
{
A-=4;
P+="IV";
}
else
{
A-=1;
P+="I";
}
}
return P;
}
 
 
 
 
 
 
 
有甚麼可以改進的嗎??
或是給個演算法方向>< 
 
ZeroJudge Forum