题目:
火星人是以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 思路: 1. 将转化后的内容用字符串数组存储,可与下标直接对应; 2. 使用getchar()函数是因为输入n之后的回车会被getline()函数读取,导致少一次输入,因此用getchar()来读取这一次回车; 3. 后面根据要求计算即可。 #include<iostream> #include<string> #include<cstdio> using namespace std; int main() { string m, f[101], q=""; string a[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; string b[12] = {"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; int n, i, j, l, p, r, number=0; cin>>n; getchar(); for (i=0; i<n; i++) getline(cin, f[i]); for (i=0; i<n; i++) { m = f[i]; if (m[0]<='9' && m[0]>='0') { for (j=0; j<m.length(); j++) number = number*10 + (m[j]-'0'); if (number < 13) cout<<a[number]; else { p = number/13; r = number; if (r == 0) cout<<b[p-1]; else cout<<b[p-1]<<" "<<a[r]; } } else { for (j=0; j<m.length(); j=j+4) { q = q + m[j] + m[j+1] + m[j+2]; for (l=0; l<13; l++) { if (q == a[l]) number += l; if (q == b[l]) number += (l+1)*13; } q = ""; } cout<<number; } number = 0; cout<<endl; } return 0; }