#题目
时间限制
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

#分析:
1.首先对于输入的是火星文还是数字得判断吧?就判断字符串第一个是否为数字
2.如果是数字,用一个数把字符串中数字取出来,除求高位取余求低位注意0的特殊情况就行
3.如果是火星文,先判断长度:
3-1.如果长度大于4,肯定是有高位有低位,分别找出高位*13+低位输出
3-2.如果长度等于4,纵观全局只有火星文的0是四位
3-3.如果长度小于4,可能是只有一个高位或只有一个低位

#代码(cpp)

#include<iostream>
#include<string.h>
using namespace std;
char low_num[][5]={{"tret"},{"jan"}, {"feb"}, {"mar"},{"apr"},{"may"},{"jun"},{"jly"},{"aug"},{"sep"},{"oct"},{"nov"},{"dec"}};
char hig_num[][5]={{" "},{"tam"},{"hel"}, {"maa"}, {"huh"}, {"tou"}, {"kes"}, {"hei"}, {"elo"}, {"syy"}, {"lok"}, {"mer"}, {"jou"}};
int main(){
    int n;
    scanf("%d\n",&n);
    while(n--){
        string a;
        getline(cin,a);
        if(a[0]>='0' && a[0]<='9'){
            int num=0;
            for(int i=0;a[i]!='\0';i++)
                num = a[i]-'0' + num*10;
            int high=num/13;
            int low=num%13;
            if(high && low)
                cout<<hig_num[high]<<" "<<low_num[low];
            else if(high)
                cout<<hig_num[high];
            else
                cout<<low_num[low];
        }
        else{
            if(a.size()>4){
                int high,low;
                int j,kg;
                for(int i=0;i<13;i++){
                    for(j=0;a[j]!=' ';j++)
                        if(a[j]!=hig_num[i][j])
                            break;
                    if(a[j]==' '){
                        high=i;
                        kg=j;
                        break;
                    }
                }
                for(int i=0;i<13;i++){
                    for(j=kg+1;a[j]!='\0';j++)
                        if(a[j]!=low_num[i][j-kg-1])
                            break;
                    if(a[j]=='\0'){
                        low=i;
                        break;
                    }
                }
                cout<<high*13+low;
            }
            else if(a.size()==4)
                cout<<0;
            else{
                int j;
                for(int i=0;i<13;i++){
                    for(j=0;a[j]!='\0';j++)
                        if(a[j]!=hig_num[i][j])
                            break;
                    if(a[j]=='\0'){
                        cout<<i*13;
                        break;
                    }
                }
                for(int i=0;i<13;i++){
                    for(j=0;a[j]!='\0';j++)
                        if(a[j]!=low_num[i][j])
                            break;
                    if(a[j]=='\0'){
                        cout<<i;
                        break;
                    }
                }
            }
        }
        cout<<endl;
    }
    return 0;
}