PAT乙级1044. 火星数字(20)

来源:互联网 发布:微信加群 知乎 编辑:程序博客网 时间:2024/06/04 18:08

题目:

火星人是以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)区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入样例:
4295elo novtam
输出样例:
hel marmay11513
思路:
1. 将转化后的内容用字符串数组存储,可与下标直接对应;
2. 使用getchar()函数是因为输入n之后的回车会被getline()函数读取,导致少一次输入,因此用getchar()来读取这一次回车;
3. 后面根据要求计算即可。
#include<iostream>#include<string>#include<cstdio>using namespace std;int main() {    string m, f[101], q="";    string a[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};    string b[12] = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};    int n, i, j, l, p, r, number=0;    cin>>n;    getchar();    for (i=0; i<n; i++)        getline(cin, f[i]);    for (i=0; i<n; i++) {        m = f[i];        if (m[0]<='9' && m[0]>='0') {            for (j=0; j<m.length(); j++)                number = number*10 + (m[j]-'0');            if (number < 13)                cout<<a[number];            else {                p = number/13;                r = number%13;                if (r == 0)                    cout<<b[p-1];                else                    cout<<b[p-1]<<" "<<a[r];            }        }        else {            for (j=0; j<m.length(); j=j+4) {                q = q + m[j] + m[j+1] + m[j+2];                for (l=0; l<13; l++) {                    if (q == a[l])                        number += l;                    if (q == b[l])                        number += (l+1)*13;                }                q = "";            }            cout<<number;        }        number = 0;        cout<<endl;    }    return 0;}