1. 程式人生 > >PAT-1044 火星數字

PAT-1044 火星數字

1044 火星數字 (20 分)

火星人是以 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<cstdio>
#include<string>
using namespace std;
int main()
{
  int n,l,num=0;
  string fire[13]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
  string jinwei[13]={"tam", "hel", "maa", "huh","tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
  string mess;
  string t="";
  cin>>n;
  getchar();
  for(int i=0;i<n;i++)
  {
    getline(cin,mess);//此處必須使用getline()
    l=mess.length();
    if(mess[0]>='0'&&mess[0]<='9')
    {
        for(int m=0;m<l;m++)
        {
          num=num*10+(mess[m]-'0');
        }
        if(num<13)
        cout<<fire[num]<<endl;
        else 
        {
          if(num%13==0&&num!=0)
        cout<<jinwei[num/13-1]<<endl;
        else
         {
        cout<<jinwei[num/13-1]<<" "<<fire[num%13]<<endl;
         }
        }
      }
    else
    {
      for(int i=0;i<l;i=i+4)
      {
        t=t+mess[i]+mess[i+1]+mess[i+2];
         for(int i=0;i<13;i++)
         {
        if(t==fire[i])
        num+=i;
        if(t==jinwei[i])
        num=num+(i+1)*13;
           }
      t="";
      }
      cout<<num<<endl;
    }
    num=0;
  }
  return 0;
}