本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90678474
People on Mars count their numbers with base 13:
For examples, the number 29 on Earth is called "hel mar" on Mars; and "elo nov" on Mars corresponds to 115 on Earth. In order to help communication between people from these two planets, you are supposed to write a program for mutual translation between Earth and Mars number systems.
Each input file contains one test case. For each case, the first line contains a positive integer N (<). Then N lines follow, each contains a number in [0, 169), given either in the form of an Earth number, or that of Mars.
For each number, print in a line the corresponding number in the other language.
4
29
5
elo nov
tam
hel mar
may
115
13
题目大意:火星人用13进制计数,把地球的十进制与火星的13进制相互转换,需要注意的是火星人的数字是字符形式。
思路:映射火星人的数字与字符,用string存储读取的一整行数据,要调用getline()函数,它会读取一行里包括空格在内的所有字符。注意一下火星人的数字超过13时,0~12映射的字符也会变化,需要加入判断~
1 #include <iostream> 2 #include <string> 3 #include <map> 4 using namespace std; 5 string Earth_Mars[25] = { "tret", 6 "jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec", 7 "tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou" }; 8 map <string, int> Mars_Earth; 9 void init(); 10 void earthToMars(string &s); 11 void marsToEarth(string &s); 12 int main() 13 { 14 init(); 15 int N; 16 scanf("%d", &N); 17 getchar(); 18 for (int i = 0; i < N; i++) { 19 string s; 20 getline(cin, s); 21 if (s[0] >= ‘0‘ && s[0] <= ‘9‘) 22 earthToMars(s); 23 else 24 marsToEarth(s); 25 } 26 return 0; 27 } 28 void marsToEarth(string &s) { 29 if (s == "tret") { 30 cout << Mars_Earth[s] << endl; 31 return; 32 } 33 int size = s.size(); 34 if (size < 4) 35 cout << Mars_Earth[s] << endl; 36 else { 37 string s1 = s.substr(0, 3), 38 s2 = s.substr(4, 3); 39 cout << Mars_Earth[s1] + Mars_Earth[s2] << endl; 40 } 41 } 42 void earthToMars(string &s) { 43 int earth = 0; 44 for (int i = 0; i < s.length(); i++) 45 earth = earth * 10 + s[i] - ‘0‘; 46 if (earth <= 12) { 47 cout << Earth_Mars[earth] << endl; 48 return; 49 } 50 else if (earth % 13 == 0) { 51 cout << Earth_Mars[earth / 13 + 12] << endl; 52 return; 53 } 54 string mars[2]; 55 mars[1] = Earth_Mars[earth % 13]; 56 earth = earth / 13; 57 mars[0] = Earth_Mars[earth + 12]; 58 cout << mars[0] << " " << mars[1] << endl; 59 } 60 void init() { 61 for (int i = 0; i < 13; i++) 62 Mars_Earth[Earth_Mars[i]] = i; 63 for (int i = 13; i < 25; i++) 64 Mars_Earth[Earth_Mars[i]] = (i - 12) * 13; 65 }
PAT甲级——1100 Mars Numbers (字符串操作、进制转换)
原文:https://www.cnblogs.com/yinhao-ing/p/10946249.html