一、題目重述 這題真的需要好好講一下,因為題目敘述真的好長。 我重新敘述一下題目好了: 輸入: 兩個羅馬數字 輸出: 一個羅馬數字,值為輸入的兩值相減 二、解法大綱 首先,羅馬數字只是用來單純標示他的值,無法做計算 而且電腦只看得懂阿拉伯數字,所以在做計算時,須先把羅馬轉成阿拉伯 因為題目是輸入兩個羅馬數字,無法直接做相減的動作,所以第一步先把羅馬轉成阿拉伯。 轉成阿拉伯後,就可以相減了,記得加絕對值,因為題目說可能第一數比較小。 計算出答案後,最後把它變成羅馬數字,就可以了。 三、解法問題 有兩個問題,也就是題目的主要部分。 1.羅馬轉成阿拉伯 我們先來觀察一個羅馬數字: III 我想聰明的你,這一定是三,那我問: 你怎麼知道? 我先給一下轉換表: I 1 V5 X10 L50 C100 D500 M1000 好,回來正題,III可以看成是 I + I + I 轉換後也就是 1 + 1 + 1,答案是3 再一個羅馬數字 IV 如果你用上面的方法,1 + 5 = 6,可是答案是四耶~ 那是因為羅馬數字有一個特殊的規則, 數碼限制: 同一數碼最多只能連續出現三次,如40不可表示為XXXX,而要表示為XL (羅馬數字 - 維基百科) 如果我們使用IIII來表示4,感覺I太多了,所以用IV來表示,意思是 5 - 1 換一個方式來表達,也就是 -1 + 4 那 MCDXXXVII 呢?我們先把一個一個分開來,變成: M, C, D, X, X, X, V, I, I 接下來,一一轉成數字,變成: 1000, 100, 500, 10, 10, 10, 5, 1, 1 接著,我們使用一個小伎倆: 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字減小數字 我們先找右邊數字比自己大的,找到就把它變成負的 1000, 100, 500, 10, 10, 5, 1, 1 1000右邊是100,比1000小,不變成負的,下一個 100右邊是500,比100大,把它變成負的(100 => -100) 500右邊是10,...
留言
張貼留言