#16937: for C++


a1045532 (a1045532)

學校 : 國立高雄大學
編號 : 91445
來源 : [60.250.185.98]
最後登入時間 :
2022-07-11 12:43:28
a013. 羅馬數字 -- NPSC 模擬試題 | From: [219.85.253.135] | 發表日期 : 2019-02-22 23:45

int main(){

    while(輸入){

        if( ==#){

           break;

        }

        else{

            找自己的方法斷開num1 num2

            num1 = read_num_func( string_var_name );

            num2 = read_num_func( string_var_name );

            answer = | num1-num2 |;

            trans_func( answer ); //在answer中cout輸出結果即可

        }

    }

    return 0;

}

 

主要有兩個字定義function 

int read_num_func( string var_name) // 目的是用來將input轉換成int 所以這裡用int 宣告這個function

// two array for reading the input
string rom_num[] = { "CM", "CD", "XC", "XL", "IX", "IV", "M", "D", "C", "L", "X", "V", "I" };
int num[] = { 900, 400, 90, 40, 9, 4, 1000, 500, 100, 50, 10, 5, 1 };

對於string的function可以多加應用

由於C++比起python來說type較為嚴謹,我這邊是以兩個array來記錄羅馬數字的符號以及數字

接著使用string變數.find(字串)來找到是從哪個點開始出現在input中,if( input.find(字串) != input.npos ) //如果等於npos表示沒有找到 直接cout<<input.npos應該會出現 4294967259這個數字

再來善用string命名.erase(開始點,長度) 這個function就可以去掉你已經找過的部分,便可以整理出數字,較困難的地方就解決了

 

 

void trans_func( int answer ) //目的是將answer轉回羅馬數字

// array for transforming the answer
string rom_num[] = { "M", "CM", "D", "CD","C","XC","L","XL","X","IX","V","IV","I" };
int num[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };

 

最後將數字解回羅馬數字,也是利用兩個陣列紀錄,數字由大到小利用迴圈將數字慢慢地減,並將array中的羅馬數字+上去就大功告成。加油啦!

 

 
ZeroJudge Forum