註冊
登錄
論壇
搜索
幫助
導航
私人消息 (0)
公共消息 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
種子論壇 | 高雄市資訊培育協會學員討論區
»
結訓課程 (青少年程式設計班)
»
C/C++
» 下次題目-a013: 羅馬數字
返回列表
發帖
發短消息
加為好友
buy
(買大)
當前離線
肉腳工程師
UID
65
帖子
149
精華
0
積分
0
閱讀權限
100
來自
高雄
在線時間
31 小時
註冊時間
2010-10-1
最後登錄
2011-10-29
版主
1
#
跳轉到
»
倒序看帖
打印
字體大小:
t
T
buy
發表於 2010-11-13 12:23
|
顯示全部帖子
下次題目-a013: 羅馬數字
http://zerojudge.tw/ShowProblem?problemid=a013
如果生活在數世紀之前的古羅馬,你應該用過 V 來表示五。V 和 5 這兩個符號都可以用來表示數目五。用來表示數目的符號稱作數字。而羅馬人用來表示數目的符號就是羅馬數字。
以下是七個基本的羅馬數字︰
羅馬數字 數目
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
所有其他的數目都是由這些數字組合而成。數目都是由左寫到右,通常值是等於組成的羅馬數字加起來。
例如十七可以表示為
X+V+I+I=XVII
10+5+1+1=17
表示羅馬數字可以使用減法來取代加法的規則。例如四可以不用四個一相加來表示 IIII,而採用五減一來表示 IV。利用這類規則,羅馬人能夠減化許多數目的表示方式,例如 IX 取代 VIIII 表示 9,及 CD 取代 CCCC 表示 400。
今日我們並不確定羅馬符號的起源為何。例如符號 V 的起源主要有兩個理論。有些學者認為五最早是用握拳、拇指在外的手勢來表示。最後以象形文字書寫而簡化為 V。
另一個理論認為 X 源自在 10 條線加上交叉線。因此五可以表示為 X 的一半,或是 V。
羅馬數字可以很容易地用來相加或相減,但算起乘除法就相當不順手。這就是為什麼現在羅馬數字並不常用的原因了。
問題
然而,羅馬數字還是經常用於書本章節及頁碼的編號。在這一題工作是讀入兩個正整數,然後輸出兩個數字差的絕對值。所有的數字都必須以羅馬數字來表示。而連續四個相同符號出現時,必須用減法規則來化簡之。
輸入說明 :
每個輸入檔中會有一個或以上的測試資料。每一行由兩個數字組成一筆測試資料,且所有數字將會小於4,000。檔案最後會以符號 # 表示結束。
輸出說明 :
每筆測試資料的答案必須輸出到檔案中,並且換行。如果答案為零,則須輸出字串 ZERO。
範例輸入 :
I I MM II #
範例輸出 :
ZERO MCMXCVIII
收藏
分享
發短消息
加為好友
buy
(買大)
當前離線
肉腳工程師
UID
65
帖子
149
精華
0
積分
0
閱讀權限
100
來自
高雄
在線時間
31 小時
註冊時間
2010-10-1
最後登錄
2011-10-29
版主
2
#
buy
發表於 2010-11-13 12:24
|
顯示全部帖子
#include <iostream>
#include <string>
#define N 7
using namespace std;
char roman[N] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
int arabic[N] = {1000, 500, 100, 50, 10, 5, 1};
int iabs(const int& t);
int to_arabic(string t);
int to_arabic(char c);
string to_roman(int t);
int main()
{
for(;;)
{
string t1, t2;
cin >> t1;
if(t1[0] == '#')
break;
else
cin >> t2;
cout << to_roman(iabs(to_arabic(t1) - to_arabic(t2))) << endl;
}
return 0;
}
inline int iabs(const int& t)
{
return (t > 0)? t : -t;
}
inline int to_arabic(string t)
{
int len = t.length(), array[len];
for(int i = 0; i < len; i++)
array[i] = to_arabic(t[i]);
len--;
int tmp = array[len];
for(int i = 0; i < len; i++)
{
if(array[i] < array[i+1])
tmp -= array[i];
else
tmp += array[i];
}
return tmp;
}
inline int to_arabic(char c)
{
for(int i = 0; i < N; i++)
if(c == roman[i])
return arabic[i];
}
inline string to_roman(int t)
{
if(t == 0)
return "ZERO";
string tmp;
for(int j = 0; j < N; j += 2)
{
int k = t / arabic[j];
if(k == 9)
tmp.push_back(roman[j]), tmp.push_back(roman[j-2]);
else if(k == 4)
tmp.push_back(roman[j]), tmp.push_back(roman[j-1]);
else
{
if(k > 4)
tmp.push_back(roman[j-1]), k -= 5;
for(int i = k; i > 0; i--)
tmp.push_back(roman[j]);
}
t %= arabic[j];
}
return tmp;
}
複製代碼
TOP
發短消息
加為好友
buy
(買大)
當前離線
肉腳工程師
UID
65
帖子
149
精華
0
積分
0
閱讀權限
100
來自
高雄
在線時間
31 小時
註冊時間
2010-10-1
最後登錄
2011-10-29
版主
3
#
buy
發表於 2010-11-18 17:17
|
顯示全部帖子
不會大家都複製貼上吧
Mai 買大誠 [E-Mail : mainword@dlinfo.tw, mainword@gmail.com] 手機 : 0911-116194
Sun Certified Java Programmer
DL Info 鼎侖資訊 [886-7-969-0998] 高雄市苓雅區光華一路206號6樓之2
TOP
返回列表
程式解題我最行 (週四19:10-21:10)
谷哥人營隊
Python研習營(113-114)
114年Python證照特訓
114年谷哥人程式體驗營
114年APCS冬令營
113Scratch夏令營
Scratch冬令營(113-114)
113年國三專班
Python證照特訓營(113)
113年程式夏令營(一)(二)
113年APCS夏令營(一)(二)
C語言 / C++ (特別輔導)
C++證照
C#
家教/特輔
C語言特輔/證照(家教)
C++證照
C#
HTML5+CSS+JavaScript+PHP+MySQL
Java 家教 (王捷恩)
TQC+資料結構
快樂學 Scratch
Python 家教 (王捷恩 康恒睿)
Python 特別輔導 (家教)
快樂 C++ (家教)
iKnow
我愛 Java (家教)
程式解題我最行 (家教)
程式常態班
C++ 新生挑戰區
考照心得分享
快樂 C++11307週五19:00
快樂C++11309週六13:30-15:30
快樂 C++11403週六1000
快樂 C++11303 (週六15:40-17:40) 3F
程式解題我最行 (週六15:30-17:30) 3F
快樂 C++ (週六13:30-15:30) 3F
快樂 C++ (週六19:00-21:00) 3F
程式解題我最行 (週六10:00-12:00) 3F
快樂學 Scratch
程式解題我最行(週五19:00-21:00)
快樂 C++ (週六13:30-15:30) 3F
程式解題我最行(週三19:15-21:15)
快樂 C++11207週六10
快樂 C++11208週六19:00
程式解題我最行 (週六19:00-21:00) 3F
程式解題我最行 (週四19:10-21:10)
產投職訓
結訓課程 (產投職訓)
Php & MySQL old
Illustrator old
Dreamweaver old
Android手機程式開發班
PHP & MySQL電子商務互動式網站實作班 (102下)
PHP & MySQL (102上)
PHP & MySQL電子商務互動式網站實作班
Photoshop數位影像設計初階
Flash創意廣告動畫初階
行銷短片視訊剪輯
數位商業攝影實務班
PHP & MySQL電子商務系統開發實務初階班
電子商務系統開發實務中階班
Server基礎架設&動態網頁設計初階班
Java視窗應用程式設計與遊戲開發班
Illustrator時尚插畫創作設計初階班
102上Php & MySQL 初階班
電子商務互動式網站實作中階
Dreamweaver多媒體網頁設計
Android手機程式開發班(2012年10月)
PHP & MySQL (2012年10月)
創意塗鴉
yahoo橫幅
google橫幅
市民學苑
第二屆樂活部落格
第一屆電腦設備簡易維護和故障排除班
專案訓練
電子商務創業班
TQC PHP認證
投資理財班
領隊導遊班
電腦基礎及網路應用身心障礙專班
應用軟體網頁化開發
[收藏此主題]
[關注此主題的新回復]
[通過 QQ、MSN 分享給朋友]