#include <iostream>
#include <string>
#include <cctype>
using namespace std;
//地球人数字 0到 12 的火星文
string a[13] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" };
//火星人将进位以后的 12 个高位数字
string b[13] = { "", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" };
void func1(string s) {//输入 数字,例29
int len = s.length(), num = 0;
for (int i = 0; i < len; i++)
num = num * 10 + (s[i] - '0');
if (num / 13) {//比13 大
cout << b[num / 13];//十位
if (num % 13) cout << ' ' << a[num % 13];//个位
} else {//比13小
cout << a[num % 13];
}
}
void func2(string s) {//输入 火星文
int len = s.length(), num = 0;
if (len == 4) {
cout << 0;//tret
return;
} else if (len == 3) {
for (int i = 1; i <= 12; i++) {
if (s == a[i]) {
cout << i;
return;
}
if (s == b[i]) {
cout << i * 13;
return;
}
}
}
else {//两个 火星文 elo nov
string temp1 = s.substr(0, 3), temp2 = s.substr(4, 3);//子串
for (int i = 1; i <= 12; i++) {
if (temp1 == b[i]) num += i * 13;
if (temp2 == a[i]) num += i;
}
cout << num;
}
return;
}
int main() {
int n;
cin >> n;
getchar();//换行符
for (int i = 0; i < n; i++) {
string s;
getline(cin, s);
if (isdigit(s[0]))
func1(s);
else
func2(s);
cout << endl;
}
return 0;
}
PAT 1044 火星数字 (20 分)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 我的PAT系列文章更新重心已移至Github,欢迎来看PAT题解的小伙伴请到Github Pages浏览最新内容。...
- 题目信息 火星人是以13进制计数的:地球人的0被火星人称为tret。地球人数字1到12的火星文分别为:jan, f...
- 传送门 https://pintia.cn/problem-sets/994805260223102976/pro...
- 1019 数字黑洞 (20 分)给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序...