1044 火星数字

这又是一道hash题。。。

注意点:

地球文如果是13的倍数,那么转换成火星文只输出一个单词,比如 13 要输出 tam;

同样,如果火星文是13的倍数,也只会给出一个单词,比如tam,转换成地球文后输出是13。

#include<iostream>
#include<algorithm>
using namespace std;
string hashtable1[13] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string hashtable2[13] = {"","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
int main() {
    int n;
    cin>>n;
    getchar();
    while(n--) {
        string str1="",str2="";
        getline(cin,str1);
        if(isdigit(str1[0])) { //地球文
            int t = stoi(str1);
            if(t < 13)  cout<<hashtable1[t]<<endl;
            else if(t % 13 == 0) cout<<hashtable2[t/13]<<endl;//如果是13的倍数,不输出末尾的 0
            else cout<<hashtable2[t/13]<<" "<<hashtable1[t%13]<<endl;
        } else { //外星文
            int sum = 0;
            if(str1.size() > 3) {
                str2 = str1.substr(0,3);//str2表示十位
                str1.erase(0,4);//str1表示个位
            }
            for(int i = 1; i <= 12; ++i) {//输出十位,或者13的倍数 
                if(hashtable2[i] == str2 || hashtable2[i] == str1)
                    sum += i*13;
            }
            for(int i = 0; i <= 12; ++i) {//输出个位
                if(hashtable1[i] == str1)
                    sum += i;
            }
            cout<<sum<<endl;
        }
    }
    return 0;
}

 

 

posted @ 2020-02-19 20:43  tangq123  阅读(274)  评论(0编辑  收藏  举报