• pat练习


    1044. 火星数字(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    火星人是以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
    
    #include <cctype>//判断字符类型需要的头文件
    #include<iostream>
    #include <sstream>
    using namespace std;
    
    int StringToNum(string str)
    {
        int num = 0;
        int Ten = 1;
        for (int i = 0; i < str.length(); i++)
        {
            char n;
            n = str[str.length() - 1 - i];
            switch (n)
            {
            case '0':num = 0 * Ten + num; Ten = Ten * 10; continue;;
            case '1':num = 1 * Ten + num; Ten = Ten * 10; continue;
            case '2':num = 2 * Ten + num; Ten = Ten * 10; continue;
            case '3':num = 3 * Ten + num; Ten = Ten * 10; continue;
            case '4':num = 4 * Ten + num; Ten = Ten * 10; continue;
            case '5':num = 5 * Ten + num; Ten = Ten * 10; continue;
            case '6':num = 6 * Ten + num; Ten = Ten * 10; continue;
            case '7':num = 7 * Ten + num; Ten = Ten * 10; continue;
            case '8':num = 8 * Ten + num; Ten = Ten * 10; continue;
            case '9':num = 9 * Ten + num; Ten = Ten * 10; continue;
            }
    
        }
        return num;
    
    }
    string MarsTonum(string mars)
    {
        int Num = 0;
        string strNum;
        if (mars.length() > 4)//两位数 
        {
            string ten = mars.substr(0, 3);
            if (ten == "tam")
            {
                Num = 1 * 13;
            }
            else    if (ten == "hel")
            {
                Num = 2 * 13;
            }
            else    if (ten == "maa")
            {
                Num = 3 * 13;
            }
            else    if (ten == "huh")
            {
                Num = 4 * 13;
            }
            else    if (ten == "tou")
            {
                Num = 5 * 13;
            }
            else    if (ten == "kes")
            {
                Num = 6 * 13;
            }
            else    if (ten == "hei")
            {
                Num = 7 * 13;
            }
            else    if (ten == "elo")
            {
                Num = 8 * 13;
            }
            else    if (ten == "syy")
            {
                Num = 9 * 13;
            }
            else    if (ten == "lok")
            {
                Num = 10 * 13;
            }
            else    if (ten == "mer")
            {
                Num = 11 * 13;
            }
            else    if (ten == "jou")
            {
                Num = 12 * 13;
            }
            string ge = mars.substr(4, 4);
            if (ge == "tret")
            {
                Num += 0;
            }
            else    if (ge == "jan")
            {
                Num += 1;
            }
            else    if (ge == "feb")
            {
                Num += 2;
            }
            else    if (ge == "mar")
            {
                Num += 3;
            }
            else    if (ge == "apr")
            {
                Num += 4;
            }
            else    if (ge == "may")
            {
                Num += 5;
            }
            else    if (ge == "jun")
            {
                Num += 6;
            }
            else    if (ge == "jly")
            {
                Num += 7;
            }
            else    if (ge == "aug")
            {
                Num += 8;
            }
            else    if (ge == "sep")
            {
                Num += 9;
            }
            else    if (ge == "oct")
            {
                Num += 10;
            }
            else    if (ge == "nov")
            {
                Num += 11;
            }
            else    if (ge == "dec")
            {
                Num += 12;
            }
        }
        else//一位数 
        {
            if (mars == "tret")
            {
                Num += 0;
            }
            else    if (mars == "jan")
            {
                Num += 1;
            }
            else    if (mars == "feb")
            {
                Num += 2;
            }
            else    if (mars == "mar")
            {
                Num += 3;
            }
            else    if (mars == "apr")
            {
                Num += 4;
            }
            else    if (mars == "may")
            {
                Num += 5;
            }
            else    if (mars == "jun")
            {
                Num += 6;
            }
            else    if (mars == "jly")
            {
                Num += 7;
            }
            else    if (mars == "aug")
            {
                Num += 8;
            }
            else    if (mars == "sep")
            {
                Num += 9;
            }
            else    if (mars == "oct")
            {
                Num += 10;
            }
            else    if (mars == "nov")
            {
                Num += 11;
            }
            else    if (mars == "dec")
            {
                Num += 12;
            }
            else    if (mars == "tam")
            {
                Num = 1 * 13;
            }
            else    if (mars == "hel")
            {
                Num = 2 * 13;
            }
            else    if (mars == "maa")
            {
                Num = 3 * 13;
            }
            else    if (mars == "huh")
            {
                Num = 4 * 13;
            }
            else    if (mars == "tou")
            {
                Num = 5 * 13;
            }
            else    if (mars == "kes")
            {
                Num = 6 * 13;
            }
            else    if (mars == "hei")
            {
                Num = 7 * 13;
            }
            else    if (mars == "elo")
            {
                Num = 8 * 13;
            }
            else    if (mars == "syy")
            {
                Num = 9 * 13;
            }
            else    if (mars == "lok")
            {
                Num = 10 * 13;
            }
            else    if (mars == "mer")
            {
                Num = 11 * 13;
            }
            else    if (mars == "jou")
            {
                Num = 12 * 13;
            }
        }
    
        if (Num >= 100)//百位 
        {
            switch (Num / 100)
            {
    
            case 1:strNum += "1"; break;
            case 2:strNum += "2"; break;
            case 3:strNum += "3"; break;
            case 4:strNum += "4"; break;
            case 5:strNum += "5"; break;
            case 6:strNum += "6"; break;
            case 7:strNum += "7"; break;
            case 8:strNum += "8"; break;
            case 9:strNum += "9"; break;
            }
        }
        if (Num >= 10)//十位 
        {
            switch (Num % 100 / 10)
            {
            case 0:strNum += "0"; break;
            case 1:strNum += "1"; break;
            case 2:strNum += "2"; break;
            case 3:strNum += "3"; break;
            case 4:strNum += "4"; break;
            case 5:strNum += "5"; break;
            case 6:strNum += "6"; break;
            case 7:strNum += "7"; break;
            case 8:strNum += "8"; break;
            case 9:strNum += "9"; break;
            }
        }
        switch (Num % 10)//个位 
        {
        case 0:strNum += "0"; break;
        case 1:strNum += "1"; break;
        case 2:strNum += "2"; break;
        case 3:strNum += "3"; break;
        case 4:strNum += "4"; break;
        case 5:strNum += "5"; break;
        case 6:strNum += "6"; break;
        case 7:strNum += "7"; break;
        case 8:strNum += "8"; break;
        case 9:strNum += "9"; break;
        }
    
    
        return strNum;
    }
    string NumToMars(string num)
    {
        /*地球人的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。*/
        string mars;
        int temp = StringToNum(num);
        if (temp / 13)
        {
            if (temp % 13 == 0)
            {
                switch (temp / 13)
                {
                case 0:mars += "tret"; break;
                case 1:mars += "tam"; break;
                case 2:mars += "hel"; break;
                case 3:mars += "maa"; break;
                case 4:mars += "huh"; break;
                case 5:mars += "tou"; break;
                case 6:mars += "kes"; break;
                case 7:mars += "hei"; break;
                case 8:mars += "elo"; break;
                case 9:mars += "syy"; break;
                case 10:mars += "lok"; break;
                case 11:mars += "mer"; break;
                case 12:mars += "jou"; break;
                }
            }
            else
            {
                switch (temp / 13)
                {
                case 0:mars += "tret "; break;
                case 1:mars += "tam "; break;
                case 2:mars += "hel "; break;
                case 3:mars += "maa "; break;
                case 4:mars += "huh "; break;
                case 5:mars += "tou "; break;
                case 6:mars += "kes "; break;
                case 7:mars += "hei "; break;
                case 8:mars += "elo "; break;
                case 9:mars += "syy "; break;
                case 10:mars += "lok "; break;
                case 11:mars += "mer "; break;
                case 12:mars += "jou "; break;
                }
            }
    
        }
        if (temp % 13 != 0||temp==0)
        {
            switch (temp % 13)
            {
            case 0:mars += "tret"; break;
            case 1:mars += "jan"; break;
            case 2:mars += "feb"; break;
            case 3:mars += "mar"; break;
            case 4:mars += "apr"; break;
            case 5:mars += "may"; break;
            case 6:mars += "jun"; break;
            case 7:mars += "jly"; break;
            case 8:mars += "aug"; break;
            case 9:mars += "sep"; break;
            case 10:mars += "oct"; break;
            case 11:mars += "nov"; break;
            case 12:mars += "dec"; break;
            }
        }
        
        return mars;
    }
    int main()
    {
    
    
    
        int count = 0;
        cin >> count;
    
        string cinNum;
        //getline(cin, cinNum);//读走换行
        cin.get();
        string coutArr[100];
        for (int i = 0; i < count; i++)
        {
            getline(cin, cinNum);
            if (isdigit(cinNum[0]))//判断字符是否是数字
            {
                coutArr[i] = NumToMars(cinNum);
            }
            else
            {
                coutArr[i] = MarsTonum(cinNum);
            }
        }
    
        for (int i = 0; i < count; i++)
        {
            cout << coutArr[i] << endl;
        }
    
    
        return 0;
    }

    边界问题 没考虑好---------费了好长时间-----习惯太差劲

  • 相关阅读:
    前端向后端发送数据时,有时需要转数据格式,但是有时会得到意外的false数据
    js字符串处理,把img标签包裹在p标签里
    antd 对话框、上传图片、轮播图结合在一起
    JavaScript 交换数组元素位置
    codeforces 803 F. Coprime Subsequences (莫比乌斯反演)
    UVa 12716 GCD XOR (数论+bitmask)
    codeforces 1556D
    codeforces 1556 E. Equilibrium (线段树)
    codeforces 1556F
    UVa 1502 GRE Words (DP+AC自动机+jry线段树)
  • 原文地址:https://www.cnblogs.com/linxuemufeng/p/8520241.html
Copyright © 2020-2023  润新知