注意本题要专门对输入为0和tret的进行特判
还要对十三进制最低位为0的数进行特判
"""
十进制转换成13进制时,若有高位,且最低位为0,则不能对应'tret',由案例:输入13,输出tam可得。
13转为13进制为1 0,最低位为0,不能对应'tret',所以1 0对应tam,而不是tam tret
只有当十进制为单个0时,才能对应'tret'
所以low[0]置为空串
"""
low = ['','jan','feb','mar','apr','may','jun','jly','aug','sep','oct','nov','dec']
# 十进制转换成13进制时,由于高位不一定存在,即x // 13可能等于0(高位为0),所以high也置为空串
high = ['','tam','hel','maa','huh','tou','kes','hei','elo','syy','lok','mer','jou']
n = int(input())
while n > 0:
n -= 1
x = input()
if x.isdigit():
x = int(x)
if x == 0:
print("tret")
continue
# 将十进制x转成13进制
high_bit = x // 13
low_bit = x % 13
# 若不strip()则可能出现高位不存在,多输出一个空格的情况
res = (high[high_bit] + " " + low[low_bit]).strip()
print(res)
else:
x = x.split()
if len(x) == 1:
if x[0] == 'tret':
print(0)
continue
"""
`index` 方法用于查找列表中某个元素第一次出现的索引位置。
如果元素存在于列表中,`index` 方法返回该元素的索引;
如果元素不存在,则抛出 `ValueError` 异常。
"""
try:
print(high.index(x[0]) * 13)
except:
print(low.index(x[0]))
else:
high_bit = high.index(x[0])
low_bit = low.index(x[1])
print(high_bit * 13 + low_bit)
以下为小细节导致的错误(即将while循环里的n -= 1
写到了最下面,并且代码中有continue
语句,就可能导致有时候直接continue
了,n -= 1
有时候执行不到,这就导致了死循环了(这里其实严格意义不能说成死循环,因为是在x = input()
处卡住了,一直在等待输入的数据,但是文件结束符EOF已经到了,所以抛出了EOFError)):
"""
十进制转换成13进制时,若有高位,且最低位为0,则不能对应'tret',由案例:输入13,输出tam可得。
13转为13进制为1 0,最低位为0,不能对应'tret',所以1 0对应tam,而不是tam tret
只有当十进制为单个0时,才能对应'tret'
所以low[0]置为空串
"""
low = ['','jan','feb','mar','apr','may','jun','jly','aug','sep','oct','nov','dec']
# 十进制转换成13进制时,由于高位不一定存在,即x // 13可能等于0(高位为0),所以high也置为空串
high = ['','tam','hel','maa','huh','tou','kes','hei','elo','syy','lok','mer','jou']
n = int(input())
while n > 0:
x = input()
if x.isdigit():
x = int(x)
if x == 0:
print("tret")
continue
# 将十进制x转成13进制
high_bit = x // 13
low_bit = x % 13
# 若不strip()则可能出现高位不存在,多输出一个空格的情况
res = (high[high_bit] + " " + low[low_bit]).strip()
print(res)
else:
x = x.split()
if len(x) == 1:
if x[0] == 'tret':
print(0)
continue
"""
`index` 方法用于查找列表中某个元素第一次出现的索引位置。
如果元素存在于列表中,`index` 方法返回该元素的索引;
如果元素不存在,则抛出 `ValueError` 异常。
"""
try:
print(high.index(x[0]) * 13)
except:
print(low.index(x[0]))
else:
high_bit = high.index(x[0])
low_bit = low.index(x[1])
print(high_bit * 13 + low_bit)
n -= 1
关于PTA中非零返回的解释:
避免这种输入多组数据的EOF异常问题,即每次将n -= 1
写在最上面,或者替换为for循环for i in range(n)