×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
#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