#29795: 何錯之有?


xiaoh7205@gmail.com (洪)

學校 : 不指定學校
編號 : 189257
來源 : [180.217.139.175]
最後登入時間 :
2022-08-18 15:36:06
a013. 羅馬數字 -- NPSC 模擬試題 | From: [180.217.140.224] | 發表日期 : 2022-04-02 00:18

#include <iostream>

#include <string>

#include <math.h>

using namespace std;

 

int change(char a)

{

if(a=='I')

    return 1;

if(a=='V')

    return 5;

if(a=='X')

    return 10;

if(a=='L')

    return 50;

if(a=='C')

    return 100;

if(a=='D')

    return 500;

if(a=='M')

    return 1000;

}

 

void print(int a,int p)  // 數字/位數 

{

if(p==4){

for(int i=0;i<a;i++)

    cout<<"M";

}

if(p==3){

if(a==4){

cout<<"CD";

}

else if(a==9){

cout<<"CM";

}

else if(a==5){

cout<<"D";

}

else if(a>5){

cout<<"D";

for(int i=0;i<a-5;i++)

    cout<<"C";

}

else if(a<5){

for(int i=0;i<a;i++)

    cout<<"C";

}

}

if(p==2){

if(a==4){

cout<<"XL";

}

else if(a==9){

cout<<"XC";

}

else if(a==5){

cout<<"L";

}

else if(a>5){

cout<<"L";

for(int i=0;i<a-5;i++)

    cout<<"X";

}

else if(a<5){

for(int i=0;i<a;i++)

    cout<<"X";

}

}

if(p==1){

if(a==4){

cout<<"IV";

}

else if(a==9){

cout<<"IX";

}

else if(a==5){

cout<<"V";

}

else if(a>5){

cout<<"V";

for(int i=0;i<a-5;i++)

    cout<<"I";

}

else if(a<5){

for(int i=0;i<a;i++)

    cout<<"I";

}

}

}

 

int number_of_digit(int a)  //傳入非0數字 

{

for(int i=0;i<5;i++){

if(a-pow(10,i)<0){

return i;

}

if(a-pow(10,i)==0){

return i+1;

}

}

}

 

int main()

{

string temp;  // 輸入的字串 

char c[100],d[100];  //將字串分成兩個 

int lenc=0,lend=0;

int a,b;  //轉成的數字 

int anser[100000];  //相減後的數字 

anser[0]=0; //共有幾個 

while(1){

lenc=0;

lend=0;

getline(cin,temp);

int index;

if(temp[0]=='#')

    break;

for(int i=0;i<temp.length();i++){

if(temp[i]==' '){

index=i+1;

break;

}else{

c[i]=temp[i];

lenc=lenc+1;

}

}

for(int i=index;i<temp.length();i++){

d[i-index]=temp[i];

lend=lend+1;

}

 

int sum=0;

for(int i=0;i<lenc;i++){

if(i<lenc && change(c[i])<change(c[i+1])){

sum=sum+change(c[i+1])-change(c[i]);

i=i+1;

}else{

sum=sum+change(c[i]);

}

}

a=sum;

sum=0;

for(int i=0;i<lend;i++){

if(i<lend-1 && change(d[i])<change(d[i+1])){

sum=sum+change(d[i+1])-change(d[i]);

i=i+1;

}else{

sum=sum+change(d[i]);

}

}

b=sum;

anser[0]=anser[0]+1;

anser[anser[0]]=abs(a-b);

}

for(int i=1;i<=anser[0];i++){

if(anser[i]==0){

cout<<"ZERO";

cout<<"\n";

continue;

}

int num=number_of_digit(anser[i]);//位數 

for(int j=num-1;j>=0;j--){

for(int k=1;k<=10;k++){

if(anser[i]-k*pow(10,j)<0){

anser[i]=anser[i]-(k-1)*pow(10,j);

    print(k-1,j+1);

    break;

    }

    if(anser[i]-k*pow(10,j)==0){

    anser[i]=anser[i]-k*pow(10,j);

    print(k,j+1);

    break;

    }

}

}

cout<<"\n";

}

}

 
#29796: Re:何錯之有?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a013. 羅馬數字 -- NPSC 模擬試題 | From: [39.8.200.239] | 發表日期 : 2022-04-02 10:24

if(i<lenc && change(c[i])<change(c[i+1])){


i<lenc改成i<lenc-1

 
#29800: Re:何錯之有?


xiaoh7205@gmail.com (洪)

學校 : 不指定學校
編號 : 189257
來源 : [180.217.139.175]
最後登入時間 :
2022-08-18 15:36:06
a013. 羅馬數字 -- NPSC 模擬試題 | From: [180.217.140.224] | 發表日期 : 2022-04-02 11:59

if(i&& change(c[i])<change(c[i+1])){


i<lenc改成i<lenc-1

這小細節太難注意到了

感激不盡!

 
ZeroJudge Forum