C++ - PAT - 1044. 火星数字(20)

火星人是以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.数字转火星文:10进制数转换成13进制数,由于数字区间是[0,169)所以13进制数最多能有两位数,降低了编程的难度,只需要考虑一位数和两位数。细节在于数字的处理,字符串的处理。进制的转换。

2.火星文转数字:火星文给出了高位和低位,解析火星文时,只要高位的数字x13+低位数字就得道了十进制数。输出即可。细节在于字符串的切割比较。大小判断。



#include
#include
#include
#include
using namespace std;

string num1[25] = {"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
string num2[13] = {"","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};



int main(){
  
 	 void tras1(string s);
  	void tras2(string s);
  
  	int n;
  	scanf("%d\n",&n);
  
  	string input;
  
  	while(n--){
  	  	getline(cin,input);
    
   	 	if(input[0]>='0'&&input[0]<='9'){
      		tras1(input);
    	}else{
      		tras2(input);
    	}
  	}
  	return 0;
} 

//数字转换火星文 
void tras1(string s){
  	int num=0;
  	int x = 0;
  	for(int i=s.size()-1 ;i>=0 ;i--){
  		num += (s[i]-48) * pow(10,x);
  		x++;
  	}
  	if(num<13){
    	cout<




你可能感兴趣的:(PAT,(Basic,Level),c语言,PAT,火星文)