火星人是以 13 进制计数的:
例如地球人的数字 输入格式:输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。 输出格式:对应输入的每一行,在一行中输出翻译后的另一种语言的数字。 |
输入样例:
4
29
5
elo nov
tam
输出样例:
hel mar
may
115
13
考察 : 字符串信息提取 |
注意 : 13的输出为tam(后续没有tret) |
思路 : 见代码 |
C/C++
#include<bits/stdc++.h>
using namespace std;
string key1[13]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
string key2[13]={"tret","tam","hel","maa", "huh", "tou", "kes","hei","elo","syy","lok","mer","jou"};
int Change(string x,string y){
int result = 0;
for(int z=0;z<13;z++) if(x==key2[z]) result+=13*z;
for(int z=0;z<13;z++) if(y==key1[z]) result+=z;
for(int z=0;z<13;z++) if(x==key1[z]) result+=z;
return result;
}
int main()
{
string s;
int N;
cin >> N;
getchar(); // 多余换行
while(N--){
getline(cin,s);
if(isalpha(s[0]))
{
string s1="",s2="";
bool f = false; // 判断单行输入字符串个数
for(int z=0;z<s.size();z++){
if(s[z]==' '){
f = true;
continue;
}
if(f) s2+=s[z];
else s1+=s[z];
}
cout << Change(s1,s2);
}
else
{
int result=0;
for(int z=0;z<s.size();z++) result=result*10+s[z]-48;
if(result>12) cout << key2[result/13];
if(result>13 && result%13!=0) cout<<" ";
if(result<12||result%13!=0) cout<< key1[result%13];
}
cout << endl;
}
return 0;
}