题意:进制转换。
思路:注意当数字是13的倍数时,只需高位叫法的单词。比如26,是“hel”,而不是“hel tret”。我被坑在这里了!对应语句1的处理。另外,在输入n和n个字符串之间需要一个吸收字符的函数,这个也搞了半天!
数字转字符串时:需要考虑(1)0~12;(2)13,26等13的倍数;(3)29,115等常规情况。
字符串转数字时:需要考虑(1)tret;(2)xxx xxx;(3)xxx,其中这一类又分为低位和高位两种可能,低位的话可直接输出,高位的话要乘base(即13)。
代码:
#include#include #include #include #include using namespace std;vector low={ "tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};vector high={ "","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};unordered_map strToInt_g;//个位unordered_map intToStr_g;unordered_map strToInt_s;//十位unordered_map intToStr_s;void init(){ for(int i=0;i<13;i++){ strToInt_g.insert(make_pair(low[i],i)); intToStr_g.insert(make_pair(i,low[i])); } for(int i=1;i<13;i++){ strToInt_s.insert(make_pair(high[i],i)); intToStr_s.insert(make_pair(i,high[i])); }}int main(){ init(); int n; cin>>n; getchar();//!!! string str; while(n--){ getline(cin,str); if(isdigit(str[0])){ int val=stoi(str); int h,l; h=val/13;//高位 l=val%13;//低位 if(h!=0 && l!=0) cout< <<' '< <<'\n'; else if(h!=0 && l==0) cout< <<'\n';//语句1 else cout< <<'\n'; }else{ if(str.size()>3){ if(str.size()==4) cout<<0<<'\n'; else{ string shi=str.substr(0,3); string ge=str.substr(4,3); cout< <<'\n'; } }else{ if(strToInt_g[str]!=0) cout< <<'\n'; else cout< <<'\n'; } } } return 0;}