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
二、羅馬數字轉整數
重點:兩兩符號比較,如果下一位小於等於當前這一位,總數就加上當前這一位,否則總數要減去當前這一位
那你問如果最後一個符號的下一符號是空的會不會報錯?會,怎麼辦!?那就不要判斷到那邊就好啦
把以上兩個各別寫成函數,用一個主函數接受輸入。
先引用"羅馬數字轉整數"將結果拿去做相減,
把相減完後的答案再去引用"整數轉羅馬數字",就是答案囉
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
二、羅馬數字轉整數
重點:兩兩符號比較,如果下一位小於等於當前這一位,總數就加上當前這一位,否則總數要減去當前這一位
那你問如果最後一個符號的下一符號是空的會不會報錯?會,怎麼辦!?那就不要判斷到那邊就好啦
把以上兩個各別寫成函數,用一個主函數接受輸入。
先引用"羅馬數字轉整數"將結果拿去做相減,
把相減完後的答案再去引用"整數轉羅馬數字",就是答案囉