火星人是以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 11513
#include <stdio.h> #include <string.h> #include <ctype.h> #define MAX 100 int Mars_Earth(char *a); int Earth_Mars(char *a); int gets_(char *a); /**************/ static char low[13][5] = {"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"}; static char high[12][4] = {"tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"}; int main() { char test[MAX][10]; int num = 0; int i; scanf("%d",&num); getchar(); for(i=0;i<num;i++) { gets_(test[i]); } for(i=0;i<num;i++) { if(isalpha(test[i][0])) { Mars_Earth(test[i]); } else{ Earth_Mars(test[i]); } } return 0; } /*********/ int gets_(char *a) { int i = 0; do{ scanf("%c",&a[i++]); }while(a[i-1]!='\n'); a[i-1] = '\0'; return i-1; } /*******/ int Earth_Mars(char *a) { int num = 0,len,num1,num2; int i; len = strlen(a); for(i=0;i<len;i++) { num = num*10+(int)(a[i]-'0'); } if(num!=0&&num%13==0) { printf("%s\n",high[num/13-1]); return 0; } if(num<=12) printf("%s\n",low[num]); if(num>13&&num<169) { num1 = num/13-1; num2 = num%13; printf("%s %s\n",high[num1],low[num2]); } return 0; } /***********/ int Mars_Earth(char *a) { int len,h_int = 0,l_int = 0,num = 0; int i; char h[4] = {'\0'},l[5] = {'\0'}; len = strlen(a); if(len<=4) { for(i=0;i<13;i++) { if(strcmp(a,low[i])==0) printf("%d\n",i); if(strcmp(a,high[i])==0) printf("%d\n",13*(i+1)); } } else{ for(i=0;i<3;i++) { h[i] = a[i]; } for(i=4;i<len;i++) { l[i-4] = a[i]; } for(i=0;i<12;i++) { if(strcmp(h,high[i])==0) h_int = i+1; if(strcmp(l,low[i])==0) l_int = i; } if(strcmp(l,low[i])==0) l_int = i; num = h_int*13+l_int; printf("%d\n",num); } return 0; }