#include<iostream>
#include<string>
#include<cmath>
#include<vector>
using namespace std;
typedef vector<string> vs; //型別定義(一維向量)
typedef vector<vs> vvs; //型別定義(二維向量)
string num_rome(int n){
switch(n){
case 1:
return "I";
case 4:
return "IV";
case 5:
return "V";
case 9:
return "IX";
case 10:
return "X";
case 40:
return "XL";
case 50:
return "L";
case 90:
return "XC";
case 100:
return "C";
case 400:
return "CD";
case 500:
return "D";
case 900:
return "CM";
case 1000:
return "M";
}
return 0;
}
int rome_num(char n){
switch(n){
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
}
return 0;
}
ostream& operator<<(ostream& os,vvs vec){
for(unsigned int i=0;i<vec.size();i++){
for(unsigned int j=0;j<vec[i].size();j++)
os<<vec[i][j];
os<<endl;
}
return os;
}
int main(){
string a,b;
vs cpy;
vvs ans; //二維向量
int save[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
while(cin>>a){
if(a=="#"){
cout<<ans;
return 0;
}
cin>>b;
int m=0,n=0;
for(unsigned int i=0;i<a.length();i++)
m+=rome_num(a[i]);
for(unsigned int i=0;i<b.length();i++)
n+=rome_num(b[i]);
int num=abs(m-n); //取絕對值
if(num==0){
string zero="ZERO";
cpy.push_back(zero);
ans.push_back(cpy);
cpy.erase(cpy.begin(),cpy.end());
}
else{
for(int i=0;i<13;i++){
if(num-save[i]<0)
continue;
cpy.push_back(num_rome(save[i]));
num-=save[i];
i--;
}
ans.push_back(cpy); //將cpy丟入二維向量ans
cpy.erase(cpy.begin(),cpy.end()); //清除cpy向量
}
}
return 0;
}
我自己執行時都會過
依照題目
我認為他用意是將各筆資料輸入後
再輸入#代表結束
之後再一次輸出答案
原本我的寫法是輸入一筆就輸出一筆
可是不管是甚麼寫法
都出現
與正確輸出不相符(line:7)
您的答案為: MMCCXVII
正確答案為: MCMXCVII
請各位幫忙檢查一下
#include
#include
#include
#include
using namespace std;
typedef vector vs; //型別定義(一維向量)
typedef vector vvs; //型別定義(二維向量)
string num_rome(int n){
switch(n){
case 1:
return "I";
case 4:
return "IV";
case 5:
return "V";
case 9:
return "IX";
case 10:
return "X";
case 40:
return "XL";
case 50:
return "L";
case 90:
return "XC";
case 100:
return "C";
case 400:
return "CD";
case 500:
return "D";
case 900:
return "CM";
case 1000:
return "M";
}
return 0;
}
int rome_num(char n){
switch(n){
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
}
return 0;
}
ostream& operator<<(ostream& os,vvs vec){
for(unsigned int i=0;i for(unsigned int j=0;j os< os< }
return os;
}
int main(){
string a,b;
vs cpy;
vvs ans; //二維向量
int save[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
while(cin>>a){
if(a=="#"){
cout< return 0;
}
cin>>b;
int m=0,n=0;
for(unsigned int i=0;i m+=rome_num(a[i]);
for(unsigned int i=0;i n+=rome_num(b[i]);
int num=abs(m-n); //取絕對值
if(num==0){
string zero="ZERO";
cpy.push_back(zero);
ans.push_back(cpy);
cpy.erase(cpy.begin(),cpy.end());
}
else{
for(int i=0;i<13;i++){
if(num-save[i]<0)
continue;
cpy.push_back(num_rome(save[i]));
num-=save[i];
i--;
}
ans.push_back(cpy); //將cpy丟入二維向量ans
cpy.erase(cpy.begin(),cpy.end()); //清除cpy向量
}
}
return 0;
}
我自己執行時都會過
依照題目
我認為他用意是將各筆資料輸入後
再輸入#代表結束
之後再一次輸出答案
原本我的寫法是輸入一筆就輸出一筆
可是不管是甚麼寫法
都出現
與正確輸出不相符(line:7)
您的答案為: MMCCXVII
正確答案為: MCMXCVII
請各位幫忙檢查一下
#include<cmath>那一行是多餘的
是之前寫別的東西留下的0.0
話說我很想知道我錯的那一行他的輸入是甚麼
不然錯誤真的找不出來..
可以請高手幫忙看看是哪裡邏輯上出錯?
還是有辦法可以知道他的輸入資料?
#include
#include
#include
#include
using namespace std;
typedef vector vs; //型別定義(一維向量)
typedef vector vvs; //型別定義(二維向量)
string num_rome(int n){
switch(n){
case 1:
return "I";
case 4:
return "IV";
case 5:
return "V";
case 9:
return "IX";
case 10:
return "X";
case 40:
return "XL";
case 50:
return "L";
case 90:
return "XC";
case 100:
return "C";
case 400:
return "CD";
case 500:
return "D";
case 900:
return "CM";
case 1000:
return "M";
}
return 0;
}
int rome_num(char n){
switch(n){
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
}
return 0;
}
ostream& operator<<(ostream& os,vvs vec){
for(unsigned int i=0;i for(unsigned int j=0;j os< os< }
return os;
}
int main(){
string a,b;
vs cpy;
vvs ans; //二維向量
int save[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
while(cin>>a){
if(a=="#"){
cout< return 0;
}
cin>>b;
int m=0,n=0;
for(unsigned int i=0;i m+=rome_num(a[i]);
for(unsigned int i=0;i n+=rome_num(b[i]);
int num=abs(m-n); //取絕對值
if(num==0){
string zero="ZERO";
cpy.push_back(zero);
ans.push_back(cpy);
cpy.erase(cpy.begin(),cpy.end());
}
else{
for(int i=0;i<13;i++){
if(num-save[i]<0)
continue;
cpy.push_back(num_rome(save[i]));
num-=save[i];
i--;
}
ans.push_back(cpy); //將cpy丟入二維向量ans
cpy.erase(cpy.begin(),cpy.end()); //清除cpy向量
}
}
return 0;
}
我自己執行時都會過
依照題目
我認為他用意是將各筆資料輸入後
再輸入#代表結束
之後再一次輸出答案
原本我的寫法是輸入一筆就輸出一筆
可是不管是甚麼寫法
都出現
與正確輸出不相符(line:7)
您的答案為: MMCCXVII
正確答案為: MCMXCVII
請各位幫忙檢查一下
#include那一行是多餘的
是之前寫別的東西留下的0.0
話說我很想知道我錯的那一行他的輸入是甚麼
不然錯誤真的找不出來..
可以請高手幫忙看看是哪裡邏輯上出錯?
還是有辦法可以知道他的輸入資料?
看你輸出的結果
是不是沒考慮到相加相減的問題?
MMCCXVII跟MCMXCVII
都錯在CM CX這種大小互換的位置
是不是沒考慮到相加相減的問題?
MMCCXVII跟MCMXCVII
都錯在CM CX這種大小互換的位置
CM我有考慮到
可是CX應該沒有這種特殊組合吧?
正確答案MCMXCVII的數值是1997
以我程式判斷應該會是
(由1000.900.500.400.100.90.50.40.10.9.5.4.1依序判斷)
1997-1000=997 -> M
997-900=97 -> CM
97-90=7 -> XC
7-5=2 -> V
2-1=1 -> I
1-1=0 -> I
我實在想不通為什麼丟上來會被判斷成MMCCXVII
MMCCXVII的數值是2217
完全不同阿= =
有一種可能性我有想到
可是想到的下一瞬間我就認為不太可能
我存取答案後
在程式讀到#號時將答案印出
然後return 0;
如果說程式沒有經過return 0;就直接執行下一組代碼就會出錯
可是既然程式是通過合法編譯器編譯
怎麼可能會略過return 0;= =?
所以這種可能性我就否決了
實在請各位大大幫我找找錯誤~"~
我真的是束手無策了...