1044. 火星数字(20)

本文介绍了一款能够实现地球数字与火星文数字互译的程序。该程序支持13进制计数法,并使用特定的火星文词汇表示0至12的数值。通过构建映射表,程序可以灵活地进行两种计数系统的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 火星人是以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<stdio.h>  
#include<map>  
#include<string>  
#include<stdlib.h>  
#include<string.h>  
using namespace std;  
map<string,int> Map1;  
map<string,int> Map2;  
void init()  
{  
  Map1["tret"]=0;  
  Map1["jan"]=1;  
  Map1["feb"]=2;  
  Map1["mar"]=3;  
  Map1["apr"]=4;  
  Map1["may"]=5;  
  Map1["jun"]=6;  
  Map1["jly"]=7;  
  Map1["aug"]=8;  
  Map1["sep"]=9;  
  Map1["oct"]=10;  
  Map1["nov"]=11;  
  Map1["dec"]=12;  
  Map2["tam"]=1;  
  Map2["hel"]=2;  
  Map2["maa"]=3;  
  Map2["huh"]=4;  
  Map2["tou"]=5;  
  Map2["kes"]=6;  
  Map2["hei"]=7;  
  Map2["elo"]=8;  
  Map2["syy"]=9;  
  Map2["lok"]=10;  
  Map2["mer"]=11;  
  Map2["jou"]=12;  
}  
int main()  
{  
    int i,j,n,m,k,t,l;  
    char str1[5],str2[5],str[10];  
    scanf("%d",&n);  
    init();  
    getchar();  
    for(l=0;l<n;l++)  
    {  
        gets(str);  
        strcpy(str2,"");  
        //printf("%s\n",str);  
        for(i=0;str[i]!='\0';i++)  
    {  
        if(str[i]==' ')  
        {  
            for(j=0;j<i;j++)  
            {  
                str1[j]=str[j];  
            }  
            str1[j]='\0';  
            t=0;  
            for(j=i+1;str[j]!='\0';j++)  
            {  
                str2[t++]=str[j];  
            }  
            str2[t]='\0';  
            break;  
        }  
    }  
    if(str[i]=='\0')  
    {  
       strcpy(str1,str);  
    }  
    //printf("%s\n",str1);  
        if(str1[0]>='0'&&str1[0]<='9')  
        {  
            map<string,int>::iterator it;  
            m=atoi(str1);  
            if(m/13!=0)  
            {  
                for(it=Map2.begin();it!=Map2.end();it++)  
                {  
                    if(it->second==(m/13))  
                    {  
                        if(m%13!=0)  
                        printf("%s",(it->first).c_str());  
                        else  
                        printf("%s\n",(it->first).c_str());  
                        break;  
                    }  
                }  
                if(m%13!=0)  
                {  
                    for(it=Map1.begin();it!=Map1.end();it++)  
                {  
                    if(it->second==(m%13))  
                    {  
                        if(m/13!=0)  
                        printf(" %s\n",(it->first).c_str());  
                        else  
                        printf("%s\n",(it->first).c_str());  
                        break;  
                    }  
                }  
                }  
  
            }  
            else  
            {  
                for(it=Map1.begin();it!=Map1.end();it++)  
                {  
                    if(it->second==(m%13))  
                    {  
                        printf("%s\n",(it->first).c_str());  
                        break;  
                    }  
                }  
            }  
        }  
        else  
        {  
            if(Map2.find(str1)!=Map2.end())  
            {  
                k=0;  
                k+=Map2[str1];  
                k*=13;  
                if(strlen(str2)!=0)  
                {  
                   k+=Map1[str2];  
                }  
                printf("%d\n",k);  
            }  
            else  
            {  
               printf("%d\n",Map1[str1]);  
            }  
        }  
    }  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值