1100 Mars Numbers

1100 Mars Numbers1100 Mars Numbers

题目大意:

如果给的是地球数字就要翻译成火星数字,否则翻译成地球数字,火星数字是13进制数。

解题思路:

由于给定数字范围为0-169,不包括169,也就是13*13-1( jou dec),所以对于火星翻译成地球可以直接截取字符串长度来截取对应的字符串然后翻译。需要注意的是13的倍数是一种特殊情况,只占一位数而没有后面的0(tret)。
代码如下:

#include<iostream>
#include<cstdio>
#include<fstream>
#include<set>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<iomanip>
#include<cstdlib>
#include<list>
#include<queue>
#include<stack>
#include<algorithm>
#define inf 0x3f3f3f3f
#define MOD 1000000007
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define meminf(a) memset(a,inf,sizeof(a))
//vector ::iterator it;
//set<int>::iterator iter;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
string func(int n,int t)//地球翻火星
{
  if(t==1)//低位
  {
    if(n==0)return "tret";
    else if(n==1)return "jan";
    else if(n==2)return "feb";
    else if(n==3)return "mar";
    else if(n==4)return "apr";
    else if(n==5)return "may";
    else if(n==6)return "jun";
    else if(n==7)return "jly";
    else if(n==8)return "aug";
    else if(n==9)return "sep";
    else if(n==10)return "oct";
    else if(n==11)return "nov";
    else if(n==12)return "dec";
  }
  else//高位
  {
    if(n==0)return "tret";
    else if(n==1)return "tam";
    else if(n==2)return "hel";
    else if(n==3)return "maa";
    else if(n==4)return "huh";
    else if(n==5)return "tou";
    else if(n==6)return "kes";
    else if(n==7)return "hei";
    else if(n==8)return "elo";
    else if(n==9)return "syy";
    else if(n==10)return "lok";
    else if(n==11)return "mer";
    else if(n==12)return "jou";
  }
}
int main()
{
  //std::ios::sync_with_stdio(false);
  //cin.tie(0);
//  freopen("test.txt","r",stdin);
//  freopen("output.txt","w",stdout);
 int n;
 map<string,int> ml;//低位
 map<string,int> mh;//高位
 ml["tret"]=0;ml["jan"]=1;ml["feb"]=2;ml["mar"]=3;ml["apr"]=4;
 ml["may"]=5;ml["jun"]=6;ml["jly"]=7;ml["aug"]=8;ml["sep"]=9;
 ml["oct"]=10;ml["nov"]=11;ml["dec"]=12;
 //mh["tret"]=0;
 mh["tam"]=1;mh["hel"]=2;mh["maa"]=3;mh["huh"]=4;
 mh["tou"]=5;mh["kes"]=6;mh["hei"]=7;mh["elo"]=8;mh["syy"]=9;
 mh["lok"]=10;mh["mer"]=11;mh["jou"]=12;
 //scanf("%d",&n);
 cin>>n;
 getchar();
 while(n--)
 {
   string s;
   getline(cin,s);
   if(s[0]>='0'&&s[0]<='9')//是数字
   {
     ll res=0;
     for(int i=0;i<s.size();i++)
     {
       res=res*10+(s[i]-'0');//得到10进制数
     }
     //cout<<res<<'*'<<endl;
     if(res>13&&res%13)//大于13且不是13的倍数
     cout<<func(res/13,2)<<' '<<func(res%13,1)<<endl;
     else if(res%13==0)cout<<func(res/13,2)<<endl;//13的倍数
     else cout<<func(res,1)<<endl;
   }
   else
   {
     ll res=0;
     if(s.size()>3)
     {
       string s1(s,0,3);
       string s2(s,4,3);
       res=mh[s1]*13+ml[s2];
     }
     else if(mh[s])res=13*mh[s];//13的倍数
     else res=ml[s];
     cout<<res<<endl;
   }
 }
 return 0;
}