PAT甲级_1100(Mars Numbers)

1100火星数字

火星上的人们以13为基数计算他们的数字(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
解题思路

简易版的进制之间的转换(10进制----13进制)。但是有几个问题需要注意:在火星文中对于13的倍数,不应再后面加上0(tret),如13对应的是tam;26对应的是hel,而不是hel tret

AC代码
#include 
#include 
using namespace std;
string v1[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string v2[13] = {"tret", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
int main() {
    int n;
    cin >> n;
    getchar();
    while(n--) {
        string str;
        getline(cin, str);
        if(str[0] >= '0' && str[0] <= '9') {        //地球数字
            int num = 0;
            for(int i = 0; i < str.size(); i++) {
                num = num * 10 + (str[i] - '0');
            }
            string res = "";
            if(num % 13 == 0) {
                res = v2[num/13];
            }else {
                if(num > 13) {
                    res = v2[num/13] + ' ';
                    num %= 13;
                }
                res = res + v1[num];
            }
            cout << res << endl;
        }else {     //火星数字
            int res = 0;
            for(int i = 0; i < str.size(); i++) {
                string words = "";
                int j = i;
                while(j < str.size() && str[j] != ' ') {
                    words += str[j++];
                }
                for(int k = 0; k < 13; k++) {
                    if(v2[k] == words) {
                        res += 13 * k;
                    }else if(v1[k] == words) {
                        res += k;
                    }
                }
            }
            cout << res << endl;
        }
    }
    return 0;
}

你可能感兴趣的:(PAT甲级)