题目
思路
进制的转换,注意13的倍数只输出一个字符串,就像10是十一样
代码
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
string one[13] = { "tret" ,"jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" };
string two[13] = { "tret","tam","hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" };
string ETM(int num) {
string str;
vector<int> v;
while (num != 0) {
v.emplace_back(num%13);
num /= 13;
}
if (v.empty()) {
return "tret";
}
else if (v.size() == 1) {
return one[v[0]];
}
else {
if (v[0] != 0)
return two[v[1]] + " " + one[v[0]];
else
return two[v[1]];
}
}
int MTE(string num) {
bool er = false;
int i = 0;
for (; i < num.length(); ++i) {
if (num[i] == ' ') {
er = true;
break;
}
}
if (!er) {
for (int j = 0; j < 13; ++j) {
if (num == one[j])
return j;
if (num == two[j])
return j * 13;
}
}
string str1 = num.substr(0, i);
string str2 = num.substr(i+1);
int sum = 0;
for (int j = 0; j < 13; ++j) {
if (str2 == one[j]){
sum += j;
break;
}
}
for (int j = 0; j < 13; ++j) {
if (str1 == two[j]) {
sum += j * 13;
break;
}
}
return sum;
}
int main()
{
int n;
cin >> n;
getchar();
for (int i = 0; i < n; ++i) {
string str;
getline(cin, str);
if (str[0] >= '0' && str[0] <= '9')
cout << ETM(stoi(str)) << endl;
else
cout << MTE(str) << endl;
}
return 0;
}