因為我是把題目分開階段來寫,最後在合併到一起,各別用很簡單的邏輯想,寫得有點亂,要是很難看懂很抱歉QQ
我自己一筆一筆資料測試都正常,但送出解答時就都是同一個錯誤結果,看了很久都看不到問題
每次錯誤都是這個↓
#0: 100% WA (line:8)
您的答案為: V
正確答案為: XVIII
我看不太懂#0、100%、line:8的意思,希望可以跟我說明一下是甚麼含意,感謝!
#include <iostream>#include <string>#include <cstring>using namespace std;
int function(string str_1){ //羅馬數字轉阿拉伯數字 int i=0; int a=0; int length=str_1.length(); while(i<length){ switch(str_1[i]){ case 'M': //1000 a= a+1000; i++; break; case 'D': //500 a= a+500; i++; break; case 'C': if(str_1[i+1]=='M'){ //900 a= a+900; i=i+2; break; } else if(str_1[i+1]=='D'){ //400 a= a+400; i=i+2; break; } else { //100 a= a+100; i++; break; } case 'L': //50 a= a+50; i++; break; case 'X': if(str_1[i+1]=='C'){ //90 a= a+90; i=i+2; break; } else if(str_1[i+1]=='L'){ //40 a= a+40; i=i+2; break; } else { //10 a= a+10; i++; break; } case 'V': //5 a= a+5; i++; break; case 'I': if(str_1[i+1]=='X'){ //9 a= a+9; i=i+2; break; } else if(str_1[i+1]=='V'){ //4 a= a+4; i=i+2; break; } else { //1 a= a+1; i++; break; } } } return a;}
int function_2(int a){ //轉換成羅馬數字 //設變數 int I=0; //1 int V=0; //5 int X=0; //10 int L=0; //50 int C=0; //100 int D=0; //500 int M=0; //1000 int IV=0; //4 int IX=0; //9 int XL=0; //40 int XC=0; //90 int CD=0; //400 int CM=0; //900
//運算
if(a==0){ //判斷是否為0 cout<<"ZERO"<<endl;return 0; }
I=a%10; //1(個位數) X=a/10%10; //10(十位數) C=a/100%10; //100(百位數) M=a/1000%10; //1000(千位數) // cout<<M<<" "<<C<<" "<<X<<" "<<I<<endl<<endl; //驗算,顯示千、百、十、個位 if(I==9){ //判斷是否為9 I-=9;IX++; } if(I==4){ //判斷是否為4 I-=4;IV++; } if(X==9){ //判斷是否為90 X-=9;XC++; } if(X==4){ //判斷是否為40 X-=4;XL++; } if(C==9){ //判斷是否為900 C-=9;CM++; } if(C==4){ //判斷是否為400 C-=4;CD++; } if(I/5){ //判斷是否為5 I-=5;V++; } if(X/5){ //判斷是否為50 X-=5;L++; } if(C/5){ //判斷是否為500 C-=5;D++; }
//輸出
for( M; M>0; M--){ //1000 cout<<"M"; } for( CM; CM>0; CM--){ //900 cout<<"CM"; } for( D; D>0; D--){ //500 cout<<"D"; } for( CD; CD>0; CD--){ //400 cout<<"CD"; } for( C; C>0; C--){ //100 cout<<"C"; } for( XC; XC>0; XC--){ //90 cout<<"XC"; } for( L; L>0; L--){ //50 cout<<"L"; } for( XL; XL>0; XL--){ //40 cout<<"XL"; } for( X; X>0; X--){ //10 cout<<"X"; } for( IX; IX>0; IX--){ //9 cout<<"IX"; } for( V; V>0; V--){ //5 cout<<"V"; } for( IV; IV>0; IV--){ //4 cout<<"IV"; } for( I; I>0; I--){ //1 cout<<"I"; } cout<<endl; return 0; }
int main(){ string str_1,str_2; int a=0,b=0; while(cin>>str_1 && str_1!="#" && cin>>str_2){ a= function(str_1); b= function(str_2); a= a-b; function_2(a); } return 0;
}
1.
我看不太懂#0、100%、line:8的意思,希望可以跟我說明一下是甚麼含意,感謝!2.
a= a-b;
line:8代表你輸出的第8行有錯
意思是代表最後輸出了很多行,我在輸出的第8行就錯了(雖然根本不知道第8行的測資)
原來如此,是這個問題!
非常感謝你!!
相信明天改完應該就沒問題了~