#31018: 寫得有點多QQ 但直覺


jddlake@gmail.com (En-en smalley)

學校 : 不指定學校
編號 : 167396
來源 : [101.136.181.196]
最後登入時間 :
2023-02-15 00:08:53
a013. 羅馬數字 -- NPSC 模擬試題 | From: [101.136.187.188] | 發表日期 : 2022-07-04 19:22

#include <bits/stdc++.h>
using namespace std;

int r_n(string s){
    map<char, int> m;
    m['I'] = 1; m['V'] = 5; m['X'] = 10; m['L'] = 50; m['C'] = 100; m['D'] = 500; m['M'] = 1000;
    int num = 0;
    if(s.length() == 1) num = m[s[0]];
    else if(s == "ZERO") num = 0;
    else{
        for(int i = 0; i < s.length(); i++){
            if(m[s[i+1]]<=m[s[i]] && i+1<s.length()) num+=m[s[i]];
            else if(m[s[i]]<m[s[i+1]] && i+1<s.length()){
                num+=m[s[i+1]];
                num-=m[s[i]];
                i++;
            }
            else if(i == s.length()-1){
                if(m[s[i]]<=m[s[i-1]]) num+=m[s[i]];
                else if(m[s[i-1]]<m[s[i]]){
                    num+=m[s[i]];
                    num-=m[s[i-1]];
                }
            }
        }
    }

    return num;
}

string n_r(int n){
    string s = "";
    int cnt = 0;
    for(cnt; 0<n; cnt++, n/=10){
        int a = n%10;
        if(a<=3){
            for(int i = 0; i<a; i++){
                if(cnt == 0) s+="I";
                if(cnt == 1) s+="X";
                if(cnt == 2) s+="C";
            }
        }
        if(a == 4){
            if(cnt == 0) s+="VI";
            if(cnt == 1) s+="LX";
            if(cnt == 2) s+="DC";
        }
        if(5<=a && a < 9){
            if(cnt == 0){
                for(int i = 0; i<a-5; i++) s+="I";
                s+="V";
            }
            if(cnt == 1){
                for(int i = 0; i<a-5; i++) s+="X";
                s+="L";
            }
            if(cnt == 2){
                for(int i = 0; i<a-5; i++) s+="C";
                s+="D";
            }
        }
        if(a == 9){
            if(cnt == 0) s+="XI";
            if(cnt == 1) s+="CX";
            if(cnt == 2) s+="MC";
        }
        if(cnt == 3)
            for(int i = 0; i<n; i++) s+="M";
    }
    reverse(s.begin(), s.end());
    return s;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    string a = "", b = "";
    while(cin >> a && a != "#"){
        cin >> b;
        int num = abs(r_n(a)-r_n(b));
        if(num == 0) cout << "ZERO" << '\n';
        else cout << n_r(num) << '\n';
    }

    return 0;
}

 
ZeroJudge Forum