解法一
✅ 完整代碼
評分結果(參考) : AC (2ms, 320KB)
#include <bits/stdc++.h>
using namespace std;
int romanSub(string line){
int num=0, previousNum=0, currentNum=0;
int n=1; // 正負號
for(int i=0; i < line.length(); i++){
if(line[i] == ' '){ n=-1; previousNum=0; currentNum=0; }
previousNum = currentNum;
if(line[i] == 'M') { currentNum = 1000; num += 1000*n; }
else if(line[i] == 'D'){ currentNum = 500; num += 500*n; }
else if(line[i] == 'C'){ currentNum = 100; num += 100*n; }
else if(line[i] == 'L'){ currentNum = 50; num += 50*n; }
else if(line[i] == 'X'){ currentNum = 10; num += 10*n; }
else if(line[i] == 'V'){ currentNum = 5; num += 5*n; }
else if(line[i] == 'I'){ currentNum = 1; num += 1*n; }
if(previousNum < currentNum){
num -= 2*previousNum*n;
}
}
return abs(num);
}
string int2roman(int num){
string roman = "";
if(num == 0) roman += "ZERO";
while(num > 0){
if(num >= 1000) { roman += "M" ; num-=1000; }
else if(num >= 900){ roman += "CM"; num-=900; }
else if(num >= 500){ roman += "D" ; num-=500; }
else if(num >= 400){ roman += "CD"; num-=400; }
else if(num >= 100){ roman += "C" ; num-=100; }
else if(num >= 90) { roman += "XC"; num-=90; }
else if(num >= 50) { roman += "L" ; num-=50; }
else if(num >= 40) { roman += "XL"; num-=40; }
else if(num >= 10) { roman += "X" ; num-=10; }
else if(num >= 9) { roman += "IX"; num-=9; }
else if(num >= 5) { roman += "V" ; num-=5; }
else if(num >= 4) { roman += "IV"; num-=4; }
else if(num >= 1) { roman += "I" ; num-=1; }
}
return roman;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
while(true){
string line;
getline(cin, line);
if(line == "#") break;
cout << int2roman(romanSub(line)) << "\n";
}
return 0;
}