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.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N (< 100). Then N lines follow, each contains a number in [0, 169), given either in the form of an Earth number, or that of Mars.
Output Specification:
For each number, print in a line the corresponding number in the other language.
Sample Input:4 29 5 elo nov tamSample Output:
hel mar may 11513
简单模拟进制转换。
#include<cstdio> #include<vector> #include<queue> #include<string> #include<iostream> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 1e5 + 10; int n, x, ans; char s[maxn]; string num[13] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec" }; string up[13] = { "", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" }; string now; int main() { scanf("%d", &n); getchar(); while (n--) { gets(s); if (s[0] >= '0'&&s[0] <= '9') { sscanf(s, "%d", &x); if (!x) { cout << num[x] << endl; continue; } cout << up[x / 13]; if (x / 13 && x % 13) cout << " "; if (x % 13) cout << num[x % 13]; cout << endl; } else { ans = 0; if (strlen(s) != 4) { for (int j = 0; !j || s[j - 1]; j += 4) { now = ""; for (int i = j; s[i] && i < j + 3; i++) now += s[i]; if (now == "") break; for (int i = 0; i < 13; i++) { if (now == up[i]) ans += i * 13; if (now == num[i]) ans += i; } } } printf("%d\n", ans); } } return 0; }