#13675: 來一點幫忙


uuwindow (菜雞唷)

學校 : 南投縣私立普台高級中學
編號 : 76918
來源 : [211.76.66.65]
最後登入時間 :
2023-06-21 16:23:17
a013. 羅馬數字 -- NPSC 模擬試題 | From: [123.194.153.227] | 發表日期 : 2018-04-06 14:25

高中生程式解題系統[a013: 羅馬數字]

 
#15547: Re:來一點幫忙


wolfwolf0104@gmail.com (paw)

學校 : 不指定學校
編號 : 81964
來源 : [36.234.128.53]
最後登入時間 :
2018-07-29 01:22:58
a013. 羅馬數字 -- NPSC 模擬試題 | From: [61.223.184.78] | 發表日期 : 2018-10-13 16:48

為何TLE?_

 

 

 

#include <iostream>

#include <cmath>

using namespace std;

 

const string roma ="MDCLXVI";

const int number[] ={1000,500,100,50,10,5,1};

 

int RomaToNumber (string n){

    int ans=0;

    for(int i=0;i<n.size();i++){

        if(roma.find(n[i])<roma.find(n[i-1])&&i!=0){

            ans-=number[roma.find(n[i-1])]*2;

        }

        ans+=number[roma.find(n[i])];

    }

    return ans;

 

}

 

string NumberToRoma (int n){

 

    string ans;

    int tmp,key;

 

    for(int i=6;i>=0;i=i-2){

        tmp=n%10;

        n=n/10;

        key=0;

        if(tmp==4){

            ans.insert(0,roma,i-1,1);

            ans.insert(0,roma,i,1);

        }

        else if(tmp==9){

            ans.insert(0,roma,i-2,1);

            ans.insert(0,roma,i,1);

        }

        else{

            tmp=tmp*pow(10,(6-i)/2);

            while(tmp>=number[i-1]){

                tmp=tmp-number[i-1];

                key=1;

            }

            while(tmp>=number[i]){

                tmp=tmp-number[i];

                ans.insert(0,roma,i,1);

            }

            if(key==1){

                ans.insert(0,roma,i-1,1);

            }

        }

    }

    return ans;

 

 

}

 

int main(){

 

    string na,nb;

 

    while(cin>>na){

        if(na=="#"){

            break;

        }

        cin>>nb;

 

        if(na==nb){

            cout<<"ZERO"<<endl;

        }

        else{

            

 

            cout<<NumberToRoma(abs(RomaToNumber(na)-RomaToNumber(nb)))<<endl;

        }

    }

 

}

 



 
ZeroJudge Forum