#46431: 保證清晰易懂的解題思路-羅馬數字相減


3b017096@gm.student.ncut.edu.t ... (Lian he)

學校 : 國立勤益科技大學
編號 : 307674
來源 : [36.232.177.219]
最後登入時間 :
2025-09-18 19:06:43

a:13: 在這一題工作是讀入兩個正整數,然後輸出兩個數字差的絕對值。所有的數字都必須以羅馬數字來表示。而連續四個相同符號出現時,必須用減法規則來化簡之。

 

What'up!!! 我是Julian,撰寫這篇文時,是我準備CPE(大學程式能力檢定)的第10天

這題是羅馬數字相減,我花了3天才解出來的題目。整個程式的架構就是 兩個函數:羅馬數字轉整數、整數轉羅馬數字、主函數(讀取輸入、做相減)

 

你說為什麼要這麼麻煩要轉來轉去呢?因為我真不知道兩串符號怎麼相減,譬如說叫你用 ABC - ZXC ,真不知怎麼解XD

因此我唯一能想到最直觀的方法就是,將輸入的羅馬數字轉成我們已經會做運算的數字, 運算完後,再轉回題目要求的羅馬數字。

那懂了嗎?可以先離開去試試看怎麼寫羅馬數字轉整數整數轉羅馬數字唷!或繼續往下看

 

一、整數轉羅馬數字

重點:先用手算,找出手算時的邏輯,接著再套用成程式的邏輯就可以了。

有沒有發現跟找零錢一模一樣?!當你要找68塊給別人,是不是先從可以找出去的最大面額找,也就是比68小的金額裡面最大的!那就是50

拿出50先放旁邊,還剩18要找,那接著再找比18小的金額裡面最大的!那就是10,拿出10先放旁邊...最後你可以得出 68 = 50 + 10 + 5 + 1 + 1 + 1

把他轉成對應的羅馬數字就可以啦!! 答案就是 LXVIII

 

二、羅馬數字轉整數

重點:兩兩符號比較,如果下一位小於等於當前這一位,總數就加上當前這一位,否則總數要減去當前這一位

那你問如果最後一個符號的下一符號是空的會不會報錯?會,怎麼辦!?那就不要判斷到那邊就好啦

 

把以上兩個各別寫成函數,用一個主函數接受輸入。

先引用"羅馬數字轉整數"將結果拿去做相減,

把相減完後的答案再去引用"整數轉羅馬數字",就是答案囉

 

 

#46432: Re: 保證清晰易懂的解題思路-羅馬數字相減


3b017096@gm.student.ncut.edu.t ... (Lian he)

學校 : 國立勤益科技大學
編號 : 307674
來源 : [36.232.177.219]
最後登入時間 :
2025-09-18 19:06:43

a:13: 在這一題工作是讀入兩個正整數,然後輸出兩個數字差的絕對值。所有的數字都必須以羅馬數字來表示。而連續四個相同符號出現時,必須用減法規則來化簡之。

 

What'up!!! 我是Julian,撰寫這篇文時,是我準備CPE(大學程式能力檢定)的第10天

這題是羅馬數字相減,我花了3天才解出來的題目整個程式的架構就是 兩個函數:羅馬數字轉整數、整數轉羅馬數字、主函數(讀取輸入、做相減)

 

你說為什麼要這麼麻煩要轉來轉去呢?因為我真不知道兩串符號怎麼相減,譬如說叫你用 ABC - ZXC ,真不知怎麼解XD

因此我唯一能想到最直觀的方法就是,將輸入的羅馬數字轉成我們已經會做運算的數字, 運算完後,再轉回題目要求的羅馬數字。

那懂了嗎?可以先離開去試試看怎麼寫羅馬數字轉整數跟整數轉羅馬數字唷!或繼續往下看

 

一、整數轉羅馬數字

重點:先用手算,找出手算時的邏輯,接著再套用成程式的邏輯就可以了。

有沒有發現跟找零錢一模一樣?!當你要找68塊給別人,是不是先從可以找出去的最大面額找,也就是比68小的金額裡面最大的!那就是50

拿出50先放旁邊,還剩18要找,那接著再找比18小的金額裡面最大的!那就是10,拿出10先放旁邊...最後你可以得出 68 = 50 + 10 + 5 + 1 + 1 + 1

把他轉成對應的羅馬數字就可以啦!! 答案就是 LXVIII

 

二、羅馬數字轉整數

重點:兩兩符號比較,如果下一位小於等於當前這一位,總數就加上當前這一位,否則總數要減去當前這一位

那你問如果最後一個符號的下一符號是空的會不會報錯?會,怎麼辦!?那就不要判斷到那邊就好啦

 

把以上兩個各別寫成函數,用一個主函數接受輸入。

先引用"羅馬數字轉整數"將結果拿去做相減,

把相減完後的答案再去引用"整數轉羅馬數字",就是答案囉