【PAT乙级】火星数字
题目描述:
火星人是以 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
解题思路:
看完题目之后一脸懵逼,13进制转换,而且还要用火星文,它这个火星文搞起我有点想笑,不就是1~12不就是月份吗 哈哈哈哈 好吧 正经一点。先建立俩个字符串数组,一个数组a是0~13的火星文,另一个数组b是12个高位数字。然后用isdigit()这个函数判断输入的是地球数字还是火星文,这一步其实只需要看第一个字符是不是数字即可。若第一个字符是数字调用自定义函数earth2spark把地球数字转火星文,否则调用自定义函数spark2earth来把火星文转地球数字。地球数字转火星文时,需要先用一个atoi(s.c_str())来把字符串数字s转换成一个int型的数字,接着对这个数字进行判断,若小于13,直接调用数组a把它转换成火星文进行输出。因为题目已知输入的数字n小于100,所以当数字大于13时,直接将十位数转火星文进行输出,如果这个数还存在个位数的话就继续将个位数转火星文并输出。火星文转数字时,先判断这个火星文字符串s的长度是否大于3,若大于3说明这个火星数是高位数,在火星文字符串s中寻找子字符串,在a,b数组中找到对应的下标,通过这个下标来转换地球数字,第一个火星文单词转地球数字时要用下标乘以13再累加到sum,第二个火星单词找到对应下标后累加到sum就行了,此时sum的值就是高位火星文转地球数字后的值。若小于3说明这个火星数是个低位数,然后判断这个火星文是个位的还是十位的,在相应的字符串数组中找到下标累加到sum即可(同理,若火星文单词是十位)的就需要乘以13再累加),最后输出sum即可。
AC代码:

原文链接:【PAT乙级】火星数字
麦芽雪冷萃 版权所有,转载请注明出处。
还没有任何评论,你来说两句吧!