题目链接:1044 火星数字
思路
首先通过第一位是否为数字判断为哪种语言,分2种情况处理。地球数处理:模13后将商与余数专为火星文的十位,个位并输出。火星数处理:一位则直接转化输出,两位则分别转换相加后输出。这道题思路上比较直接,就是代码冗长,写了50多行,看着还挺乱的,不知道大佬是不是有简洁的写法或者思路。
代码
#include <iostream>
using namespace std
;
string oneM
[13] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string tenM
[13] = {"","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
int find(string s
){
for(int i
=0;i
<13;i
++){
if(s
== oneM
[i
]) return i
;
if(s
== tenM
[i
]) return 13*i
;
}
return 0;
}
void translate(string s
){
string numM1
,numM10
;
if(s
[0]>='0' && s
[0]<='9'){
int numE
= 0,flag10
,flag1
;
for(int i
=0;i
<s
.length();i
++) numE
= numE
* 10 + (s
[i
] - '0');
flag10
= numE
> 12 ? 1 : 0;
flag1
= numE
% 13 ? 1 : 0;
numM10
= tenM
[numE
/13];
numM1
= oneM
[numE
%13];
if(flag10
) cout
<< numM10
;
if(flag10
&& flag1
) cout
<< ' ';
if(flag1
|| !flag10
) cout
<< numM1
;
cout
<< endl
;
}
else{
int numE
= 0;
if(s
.length()==3) numE
= find(s
);
else{
numM1
= s
;
numM10
= s
;
numM1
.erase(0,4);
numM10
.erase(3,4);
numE
= find(numM1
);
numE
+= find(numM10
);
}
cout
<< numE
<< endl
;
}
}
int main(){
int N
;
cin
>> N
;
getchar();
for(int i
=0;i
<N
;i
++){
string s
;
getline(cin
,s
);
translate(s
);
}
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-7413.html