RRR_mx 2016-12-02 13:18 采纳率: 0%
浏览 1573

PAT 1044火星数字 自己运行对但提交不过

自己运行无错误,但提交过不了,想知道错误在哪里
原题地址

#include
using namespace std;

string l[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; //低位
string h[12] = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; //高位
void EToM(int num){ //地球数字 --> 火星数字

int a[2];
a[1] = num%13; //个位
a[0] = (num/13)%13; //十位

if(a[0] == 0) cout << l[a[1]] << endl;   //0-12 
else if(a[1] == 0 && a[0] != 0) cout << h[a[0]-1] << endl;  //13的倍数 
else cout << h[a[0]-1] << " " << l[a[1]] << endl;

}
int MToE(string s){ //火星数字 --> 地球数字
int t;
for(int i = 0; i < 12; i ++)
if(s == h[i]) return (i+1)*13; //高位,则乘以13^1
for(int i = 0; i < 13; i ++)
if(s == l[i]) return i; //低位,则乘以13^0
}
int main()
{
int n;
cin >> n;
getchar(); //使用getline时会将第一次cin>>N的时候回车记录在内,从而少一次循环所以用getchar()捕捉那个回车
for(int i = 0; i < n; i ++){
string s;
getline(cin, s);
if(s[0] >= '0' && s[0] <= '9'){ //输入为地球数字,即数字
int num = 0;
for(int j = 0; j < s.size(); j ++)
num = num*10 + (s[j]-'0');
EToM(num);
}
else{ //输入为火星数字,即字符串
string s1, s2;
int num1 = 0, num2 = 0;
for(int j = 0; j < 3; j ++) s1+= s[j]; num1 = MToE(s1);
for(int j = 4; j < s.size(); j++) s2+= s[j]; num2 = MToE(s2);
cout << num1+num2 << endl;
}
}
return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-12-02 15:25
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题