火星人是以 13 进制计数的:
- 地球人的 0 被火星人称为 tret。
- 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
- 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。
例如地球人的数字 29
翻译成火星文就是 hel mar
;而火星文 elo nov
对应地球数字 115
。为了方便交流,请你编写程序实现地球和火星数字之间的互译。
输入格式:
输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。
输出格式:
对应输入的每一行,在一行中输出翻译后的另一种语言的数字。
输入样例:
4
29
5
elo nov
tam
结尾无空行
输出样例:
hel mar
may
115
13
结尾无空行
代码:
word1 = ['tret','jan','feb','mar','apr','may','jun','jly','aug','sep','oct','nov','dec']
word2 = ['tret','tam','hel','maa','huh','tou','kes','hei','elo','syy','lok','mer','jou']
def changeMars(word):#把火星文转化为数字的函数
data = list(word.split())
length = len(data)
for i in range(length):
if data[i] in word1:
data[i] = word1.index(data[i])
elif data[i] in word2:
data[i] = word2.index(data[i])
S = 0
for i in range(length-1,-1,-1):
S += data[i]*13**(length-1-i)
return S #返回数字
def changeEarth(num):#把数字转化为火星文的函数
number = []
if not num:
number.append(0)#如果num = 0就加一个0
while num:
number.insert(0,(num % 13))
num //= 13
length = len(number)
if length-1:
for i in range(length-1):
number[i] = word2[number[i]]
number[-1] = word1[number[-1]]
if number[-1] == 'tret' and length > 1:#当位数大于1且个位是tret的时候应该把tret删掉,这是火星文的特殊表示
number.pop()
return number
N = int(input())
for i in range(N):
data = input()
if data[0].isalpha():
if len(data) == 3 and data in word2:
data += ' tret'
print(changeMars(data))
else:
list1 = changeEarth(int(data))
length = len(list1)
if length == 1:
print(list1[0])
else:
for i in range(length):
if i != length-1:
print(list1[i]+" ",end='')
else:
print(list1[i])
注意:1.如果输入0应该返回tret(测试点1)
2.如果输入tam实际表示的是tam tret也就是13进制的10
火星文表示数字如果十位数字是高位数字应该省略个位的tret
3.如果输入130应该返回lok (测试点2、4)