没啥好说的,就是用map存,然后进制转换。
#include<bits/stdc++.h>
using namespace std;
string spark[25] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
unordered_map<string, int> stoe;
unordered_map<int, string> etosLow, etosHigh;
int main() {
int n;
string s;
for (int i = 0; i < 13; i++) {
stoe[spark[i]] = i;
etosLow[i] = spark[i];
}
for (int i = 13; i < 25; i++) {
stoe[spark[i]] = 13 * (i - 12);
etosHigh[i - 12] = spark[i];
}
scanf ("%d", &n);
getchar();
for (int i = 0; i < n; i++) {
getline(cin, s);
// cout << s << endl;
if (isdigit(s[0])) {
int now = stoi(s);
// cout << "now : " << now << endl;
int l = now % 13;
int h = now / 13;
// cout << h <<". " << l << endl;
// 2, 3
if (h != 0) {
printf ("%s", etosHigh[h].c_str());
}
if (l != 0) {
if (h != 0) printf (" ");
printf ("%s", etosLow[l].c_str());
}
if (h == 0 && l == 0) printf ("%s", etosLow[0].c_str());
printf ("\n");
}
else {
if (s.size() == 3) {
printf ("%d\n", stoe[s]);
}
else {
string sh = s.substr(0, 3);
string sl = s.substr(4, 3);
printf ("%d\n", stoe[sh] + stoe[sl]);
}
}
}
}