#13274: a013: 羅馬數字


nkavengertree (LaG)

學校 : 不指定學校
編號 : 62501
來源 : [49.216.191.28]
最後登入時間 :
2021-11-21 03:06:49
a013. 羅馬數字 -- NPSC 模擬試題 | From: [163.30.20.138] | 發表日期 : 2018-01-23 15:09

利用優先權,從羅馬數字轉成十進位數字

//判斷羅馬數字的優先權
int rmPriority(char word){
    int result;
    switch (word){
        case 'I':
            result = 1;
            break;
        case 'V':
            result = 2;
            break;
        case 'X':
            result = 3;
            break;
        case 'L':
            result = 4;
            break;
        case 'C':
            result = 5;
            break;
        case 'D':
            result = 6;
            break;
        case 'M':
            result = 7;
            break;

    }
return result;
}

利用字串讀入,再從0 ~ string.length()-1依序做判斷、累加。

第一種情況:優先權較大          XI = 10 + 1 = 11

第二種情況:優先權一樣          III = 1 + 1 + 1 = 3

第三種情況:優先權較小          IX = -1 + 10 = 9

 

 

利用迴圈,不斷減可以分到的字母,必須列出所有可能。

int kind[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}

string kindWord[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};

int index = 0;//索引

string answer = "";//答案

while(數字 > 0){

    while(數字 > kind[索引]){

        數字減少

        答案字串增加字元

    }

    索引++

}

最後回傳 return answer即為答案

 

AC (0ms, 288KB)

https://pastebin.com/vEn8Fk07

 
#13589: Re:a013: 羅馬數字


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a013. 羅馬數字 -- NPSC 模擬試題 | From: [1.173.96.138] | 發表日期 : 2018-03-24 23:10

關於 rmPriority() 的功能,可以用 rmToNumber() 就達到一樣的效果,剛好羅馬數字大的優先權較高。

 
ZeroJudge Forum