火星人是以13进制计数的:

  1. 地球人的0被火星人称为tret。

  2. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。

  3. 火星人将进位以后的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

注意:如果数字是13的倍数,输出火星数字时,末位的0不打印。
(老实说,这道题我的代码相当差劲,值得注意的是strstr函数和strcmp函数的使用)
程序代码:

#include<stdio.h>
#include<string.h>
char c_0[][5]={"tret","jan","feb","mar","apr","may","jun", "jly", "aug", "sep", "oct", "nov", "dec"};
char c_1[][4]={"\0","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
char in[10][10]={0};
char ans[10]={0};
void num_to_char(int n,char* ans);
void print_mars(char* ans[]);
int main()
{
    int n,i=0;
    int tmp;
    scanf("%d",&n);
    getchar();
    while(i<n)
    {
        gets(in[i]);
        i++;
    }
    for(i=0;i<n;i++)
    {
        memset(ans,0,10);
        if(isNum(in[i]))
        {
            tmp = GetNum(in[i]);
            num_to_char(tmp,ans);
            printf("%s\n",ans);             
        }
        else
        {
            tmp = mars_to_earth(in[i]);
            printf("%d\n",tmp);
        }
    }
    return 0;
}
int mars_to_earth(char* in)
{   
    int i=0,sum=0;
    for(i=1;i<13;i++)
    {
        if(strstr(in,c_1[i]))
        {
            sum = i*13;
            break;
        }
    }
    for(i=0;i<13;i++)
    {
        if(strstr(in,c_0[i]))
        {
            sum = sum + i;
            break;
        }
    }
    return sum;
}
void num_to_char(int n,char* ans)
{
    char *p;
    int i=0;
    if(n>=13)
    {
        p = c_1[n/13];  
        while(*p!='\0')
        {
            ans[i] = *p;
            i++;
            p++;
        }
        if(n%13!=0)
        {
            ans[i] = ' ';
            i++;
            p = c_0[n%13];
                    while(*p!='\0')
                    {
                            ans[i] = *p;
                            i++;
                            p++;
                    }
            ans[i]= '\0';
        }
        else
        {
            ans[i] = '\0';
        }

    }
    else
    {
                p = c_0[n%13];
                while(*p!='\0')
                {
                        ans[i] = *p;
                        i++;
                        p++;
                }
        ans[i] = '\0';

    }   
}
int GetNum(char* s)
{
    int num=0;
    char *p =s;
    while(*p!='\0')
    {
        num = num*10 + *p - '0';
        p++;
    }
    return num;
}
int isNum(char *s)
{
    if(s[0]>='0'&&s[0]<='9')
        return 1;
    else 
        return 0;
}