zoukankan      html  css  js  c++  java
  • 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;
    }

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

  • 相关阅读:
    通过HttpListener实现简单的Http服务
    WCF心跳判断服务端及客户端是否掉线并实现重连接
    NHibernate初学六之关联多对多关系
    NHibernate初学五之关联一对多关系
    EXTJS 4.2 资料 跨域的问题
    EXTJS 4.2 资料 控件之Grid 那些事
    EXTJS 3.0 资料 控件之 GridPanel属性与方法大全
    EXTJS 3.0 资料 控件之 Toolbar 两行的用法
    EXTJS 3.0 资料 控件之 combo 用法
    EXTJS 4.2 资料 控件之 Store 用法
  • 原文地址:https://www.cnblogs.com/linxuemufeng/p/8520241.html
Copyright © 2011-2022 走看看