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中的羅馬數字+上去就大功告成。加油啦!