#13274: a013: 羅馬數字


nkavengertree (LaG)


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

//判斷羅馬數字的優先權
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)


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