天津网络推广网站建设公司,企业网站关键字优化,杏坛网站建设,wordpress导入demo数据题目
火星人是以 13 进制计数的#xff1a;
地球人的 0 被火星人称为 tret。地球人数字 1 到 12 的火星文分别为#xff1a;jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。火星人将进位以后的 12 个高位数字分别称为#xff1a;tam, hel, maa, huh, tou, …题目
火星人是以 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。为了方便交流请你编写程序实现地球和火星数字之间的互译。
输入格式
输入第一行给出一个正整数 N100随后 N 行每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文或者是火星文。
输出格式
对应输入的每一行在一行中输出翻译后的另一种语言的数字。
输入样例
4
29
5
elo nov
tam输出样例
hel mar
may
115
13分析
火星文的13的倍数就是类似tam表示它的个位不会出现tret。千万不要被我们的习惯影响。输入的数字既有火星文又有地球文且包含空格所以要使用getline读取。不过使用getline前要调用一次getchar函数来吃掉键盘缓冲区中的’\n’。用两个函数分别来处理地球文和火星文处理地球文就是先要将字符串转为其数值然后以13作为关键数取余或者求商然后去和定义好的火星文比较并输出处理火星文则是相当于13进制转10进制关键在于要分割字符串这个可以使用substr函数解决。还要判断输入的是地球文还是火星文这个可以通过判断字符串的首字符来解决。
AC代码
#includeiostream
#includestring
using namespace std;
//存储火星文
string s1[13] {tret, jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec} ;
string s2[13] {, tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou};
int main()
{void fun1(string s);void fun2(string s);int i,N;string s;cinN;getchar(); //用于吃掉缓冲区里的\nfor(i0; iN; i){getline(cin,s);if(s[0]0s[0]9)fun1(s);elsefun2(s);}return 0;
}
//地球转火星
void fun1(string s)
{int astoi(s);if(a0a13){couts1[a]endl;}else if(a13a%130){couts2[a/13]endl;}else if(a13a%13!0){couts2[a/13] s1[a%13]endl;}
}
//火星转地球
void fun2(string s)
{int i,flag10,flag20;string S1,S2;if(s.length()4){S1s.substr(0,3);S2s.substr(4);}else{S1s;}for(i1; i13; i){if(S1s2[i])flag1i;if(S1s1[i]||S2s1[i])flag2i;}coutflag1*13flag2endl;
}
更多题解 pat 乙级(Basic Level) 题解汇总持续更新C