#30115: 直覺解法


ningenwoyamaru (よう女の桜)

學校 : 國立臺中第二高級中學
編號 : 191983
來源 : [223.141.245.252]
最後登入時間 :
2024-04-24 15:20:56
a013. 羅馬數字 -- NPSC 模擬試題 | From: [36.235.173.175] | 發表日期 : 2022-04-29 22:47

#include<bits/stdc++.h>

using namespace std;

void Rome(int an_3){
    int a,b,c,d;
    a=an_3/1000;//¤d¦ì 
    b=an_3/100-a*10;//¦Ê¦ì 
    c=an_3/10-a*100-b*10;//¤Q¦ì 
    d=an_3-a*1000-b*100-c*10;//­Ó¦ì 
//    cout<<a<<b<<c<<d<<endl;
    
    for(int i=0;i<a;i++){//¤d¦ì
        cout<<"M";
    }
    
    if(b==9){//¦Ê¦ì 
        cout<<"CM";
    }
    else if(b==4){
        cout<<"CD";
    }
    else if(b>=5){
        cout<<"D";
        for(int i=0;i<b-5;i++){
            cout<<"C";
        }
    }
    else{
        for(int i=0;i<b;i++){
            cout<<"C";
        }
    }
    
    if(c==9){//¤Q¦ì 
        cout<<"XC";
    }
    else if(c==4){
        cout<<"XL";
    }
    else if(c>=5){
        cout<<"L";
        for(int i=0;i<c-5;i++){
            cout<<"X";
        }
    }
    else{
        for(int i=0;i<c;i++){
            cout<<"X";
        }
    }
    
    if(d==9){//­Ó¦ì 
        cout<<"IX"<<endl;
    }
    else if(d==4){
        cout<<"IV"<<endl;
    }
    else if(d>=5){
        cout<<"V";
        for(int i=0;i<d-5;i++){
            cout<<"I";
        }
        cout<<endl;
    }
    else{
        for(int i=0;i<d;i++){
            cout<<"I";
        }
        cout<<endl;
    }
}
//I    1
//V    5
//X    10
//L    50
//C    100
//D    500
//M    1,000

//CM 900
//XC 90

void solve(string str_1,string str_2,map<string,int> map,vector<int> num_1,vector<int> num_2){
    int an_1=0,an_2=0,an_3;
    for(int i=0;i<str_1.length();i++){
        string s_1;
        s_1=str_1[i];
        num_1[i]=map[s_1];
//        cout<<num_1[i]<<endl;
    }
    for(int i=0;i<str_2.length();i++){
        string s_2;
        s_2=str_2[i];
        num_2[i]=map[s_2];
//        cout<<num_2[i]<<endl;
    }
    for(int i=str_1.length();i>=0;i--){
        if(i-1>=0){
            if(num_1[i-1] < num_1[i]){
                an_1 -= num_1[i-1];
            }
            else{
                an_1 += num_1[i-1];
            }
        }
    }
    for(int i=str_2.length();i>=0;i--){
        if(i-1>=0){
            if(num_2[i-1] < num_2[i]){
                an_2 -= num_2[i-1];
            }
            else{
                an_2 += num_2[i-1];
            }
        }
    }
    an_3=abs(an_1-an_2);
    if(an_3 == 0){
        cout<<"ZERO"<<endl;
    }
    else{
        Rome(an_3);
    }
}

int main(){
    string str_1,str_2;
    vector<int> num_1,num_2;
    
    map<string,int> map;
    map["I"]=1;
    map["V"]=5;
    map["X"]=10;
    map["L"]=50;
    map["C"]=100;
    map["D"]=500;
    map["M"]=1000;
    
    while(true){
        cin>>str_1;
        if(str_1 == "#"){
            exit(0);
        }
        else{
            cin>>str_2;
            num_1.assign(str_1.length()+1,0);
            num_2.assign(str_2.length()+1,0);

            solve(str_1,str_2,map,num_1,num_2);
        }
        
    }
}

 
ZeroJudge Forum