Presentation is loading. Please wait.

Presentation is loading. Please wait.

11616:Roman Numerals ★★☆☆☆ 題組:Problem Set Archive with Online Judge

Similar presentations


Presentation on theme: "11616:Roman Numerals ★★☆☆☆ 題組:Problem Set Archive with Online Judge"— Presentation transcript:

1 11616:Roman Numerals ★★☆☆☆ 題組:Problem Set Archive with Online Judge
解題者:陳仕軒、邱珮珊 解題日期:2015年4月29日 題意:本題請你做羅馬數字與阿拉伯數字的轉換,羅馬數字以英文字母表示數目,其對應關係如下: Letter I V X L C D M Value 輸入有多筆測試資料,每筆資料會有一個阿拉伯數字或是一個羅馬數字,其值為 n (0 < n < 4000)。請在每一列輸出轉換結果。

2

3 歸納: 1. 因為題目數字只到3999,所以「加線乘千」用不到 2. 左邊比右邊大,直接加 3. 左減的規則只會發生在I、X、C 4
歸納: 1. 因為題目數字只到3999,所以「加線乘千」用不到 2. 左邊比右邊大,直接加 3. 左減的規則只會發生在I、X、C 4. I右邊為V、X ; X右邊為L、C ; C右邊為D、M左減就會發生 5. 綜合上述,我們將羅馬數字重新定義為I(1)、IV(4)、V(5)、IX(9)、X(10)、XL(40)、L(50)、XC(90)、C(100)、CD(400)、D(500)、CM(900)、M(1000),測資中阿拉伯數字都能用這13種組合所組合出來。 EX: MCMLXXXIII = M CM L X X X I I I = =1983

4 題意範例: XXV  25 4  IV 942  CMXLII MCMLXXXIII  1983
解法:使用字串先將所有東西讀進來,判斷第一個字是數字還是英文字母,如果是數字便輸出羅馬數字,若是英文字母便輸出數字。 阿拉伯數字轉羅馬數字: 由大到小依序判斷我們所定義的那13種符號,若原來的質大於該符號所代表的阿拉伯數字,便將原來的質減去該符號所代表的阿拉伯數字,然後輸出該符號即可。 羅馬數字轉阿拉伯數字: 判斷當前字元,從左到右依序加總,若遇到I、X、C時,就確認與下一個字元的搭配是否有符合我們所定義的符號,若有就加上該符號代表的質,然後繼續加總。

5 解法範例: 阿拉伯數字轉羅馬數字: Now_value = 942 Now_value compare action Roman format < 1000 ☓ ☓ >= CM < 900 ☓ CM < 500 ☓ CM < 400 ☓ CM < 100 ☓ CM < 90 ☓ CM < 50 ☓ CM > CMXL 2 2 < 40 ☓ CMXL 2 2 < 10 ☓ CMXL 2 2 < 9 ☓ CMXL 2 2 < 5 ☓ CMXL

6 2 2 < 5 ☓ CMXL 2 2 < 4 ☓ CMXL 2 2 >= CMXLI 1 1 >= CMXLII Answer: CMXLII 羅馬數字轉阿拉伯數字: sum=0 string= MCMLXXXIII Now_char Next_char action value M ☓ sum += C M sum += L ☓ sum += X X sum += X X sum += X I sum += I I sum +=

7 I I sum += I I sum += Answer: 1983 討論: 1. UVA上,題目中的XC=900是錯的,不要被騙囉,XC=90。


Download ppt "11616:Roman Numerals ★★☆☆☆ 題組:Problem Set Archive with Online Judge"

Similar presentations


Ads by Google