1044. 火星数字(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
火星人是以13进制计数的:
- 地球人的0被火星人称为tret。
- 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
- 火星人将进位以后的12个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。
例如地球人的数字“29”翻译成火星文就是“hel mar”;而火星文“elo nov”对应地球数字“115”。为了方便交流,请你编写程序实现地球和火星数字之间的互译。
输入格式:
输入第一行给出一个正整数N(<100),随后N行,每行给出一个[0, 169)区间内的数字 —— 或者是地球文,或者是火星文。
输出格式:
对应输入的每一行,在一行中输出翻译后的另一种语言的数字。
输入样例:4 29 5 elo nov tam输出样例:
hel mar may 115 13
#include <iostream> #include<string.h> #include<cstdio> using namespace std; int k[188][188][188]; void init() { k['t']['r']['e']=0; k['j']['a']['n']=1; k['f']['e']['b']=2; k['m']['a']['r']=3; k['a']['p']['r']=4; k['m']['a']['y']=5; k['j']['u']['n']=6; k['j']['l']['y']=7; k['a']['u']['g']=8; k['s']['e']['p']=9; k['o']['c']['t']=10; k['n']['o']['v']=11; k['d']['e']['c']=12; k['t']['a']['m']=13; k['h']['e']['l']=26; k['m']['a']['a']=39; k['h']['u']['h']=52; k['t']['o']['u']=65; k['k']['e']['s']=78; k['h']['e']['i']=91; k['e']['l']['o']=104; k['s']['y']['y']=117; k['l']['o']['k']=130; k['m']['e']['r']=143; k['j']['o']['u']=156; } int main() { string l[]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"}; string h[]={"","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"}; char s[10]; init(); int n; scanf("%d",&n); gets(s); while(n--) { gets(s); if(s[0]>='0'&&s[0]<='9') { int num=0; for(int i=0;s[i];i++) { num=num*10+(s[i]-'0'); } if(num%13==0&&num!=0) cout<<h[num/13]<<endl; else if(num/13==0) cout<<l[num]<<endl; else cout<<h[num/13]<<" "<<l[num%13]<<endl; } else { int len=strlen(s); int num=0; if(len==3||len==4) { cout<<k[s[0]][s[1]][s[2]]<<endl; } else { num=k[s[0]][s[1]][s[2]]+k[s[4]][s[5]][s[6]]; cout<<num<<endl; } } } return 0; }