給兩個羅馬數字 a, b
輸出 |a-b|(用羅馬數字表示)
評分結果(參考) : AC (1ms, 316KB)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int roman2int(string s){
int res=0, prev=0, curr=0;
for(char c : s){
if(c == 'M') curr = 1000;
else if(c == 'D') curr = 500;
else if(c == 'C') curr = 100;
else if(c == 'L') curr = 50;
else if(c == 'X') curr = 10;
else if(c == 'V') curr = 5;
else if(c == 'I') curr = 1;
res += curr;
if(prev < curr) res -= 2*prev;
prev = curr;
}
return res;
}
string int2roman(int num){
if(num == 0) return "ZERO";
string res = "";
while(num > 0){
if(num >= 1000) { res += "M" ; num -= 1000; }
else if(num >= 900){ res += "CM"; num -= 900; }
else if(num >= 500){ res += "D" ; num -= 500; }
else if(num >= 400){ res += "CD"; num -= 400; }
else if(num >= 100){ res += "C" ; num -= 100; }
else if(num >= 90) { res += "XC"; num -= 90; }
else if(num >= 50) { res += "L" ; num -= 50; }
else if(num >= 40) { res += "XL"; num -= 40; }
else if(num >= 10) { res += "X" ; num -= 10; }
else if(num >= 9) { res += "IX"; num -= 9; }
else if(num >= 5) { res += "V" ; num -= 5; }
else if(num >= 4) { res += "IV"; num -= 4; }
else if(num >= 1) { res += "I" ; num -= 1; }
}
return res;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
string a, b;
while(true){
cin >> a;
if(a == "#") break;
cin >> b;
cout << int2roman(abs(roman2int(a) - roman2int(b))) << "\n";
}
return 0;
}