PAT乙级1044

火星人是以 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 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<vector>
 7 #include<queue>
 8 using namespace std;
 9 string a[13]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
10 string b[12]={"tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
11 int n;
12 string ans;
13 bool f;
14 void numchange(string ans)
15 {
16     int length=ans.length();
17     int total=0;
18     for(int i=0;i<length;i++) {
19         total = total + (ans[i]-'0') * pow(10.0, length - i - 1);
20     }
21     int one=total/13;
22     int two=total%13;
23     if(two==0&&one==0)
24         cout<<a[0]<<endl;
25     else if(one==0)
26         cout<<a[two]<<endl;
27     else if(two==0)
28         cout<<b[one-1]<<endl;
29     else
30         cout<<b[one-1]<<" "<<a[two]<<endl;
31 }
32 void strchange(string ans)
33 {
34   int length=ans.length();
35   //cout<<length<<" ";
36   int sum=0;
37   if(length==3){
38       for(int i=0;i<13;i++){
39           if(ans==a[i])
40           {
41               sum=i;
42               //cout<<1<<" "<<i<<endl;
43               break;
44           }
45       }
46       for(int i=0;i<12;i++){
47           if(ans==b[i])
48           {
49               sum=(i+1)*13;
50 
51               break;
52           }
53       }
54   }
55   else
56   {
57       string s,g;
58       for(int i=0;i<3;i++){
59           s+=ans[i];
60       }
61       for(int i=4;i<7;i++)
62           g+=ans[i];
63 
64       for(int i=0;i<12;i++){
65           if(s==b[i]){
66               sum+=(i+1)*13;
67               break;
68           }
69       }
70       for(int i=0;i<13;i++){
71           if(g==a[i]){
72               sum+=i;
73               break;
74           }
75       }
76   }
77   cout<<sum<<endl;
78 }
79 int main()
80 {
81 
82     cin>>n;
83     getchar();
84     for(int i=0;i<n;i++){
85         getline(cin,ans);
86         if(ans[0]>='0'&&ans[0]<='9')
87             f=1;
88         else
89             f=0;
90         if(f)
91         numchange(ans);
92         else
93             strchange(ans);
94     }
95     return 0;
96 }
原文地址:https://www.cnblogs.com/zuiaimiusi/p/11348409.html