PTA甲级考试真题练习100——1100 Mars Numbers

题目

在这里插入图片描述

思路

进制的转换,注意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;
}
发布了153 篇原创文章 · 获赞 4 · 访问量 3799

猜你喜欢

转载自blog.csdn.net/qq_43647628/article/details/105450320