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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值