标签:with space people art cpp help lse hat ica
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
分析:
本来以为这是一道简单题,但是中间有好多细节如果注意不到的话,真的很无语。
1. main函数中cin >> n;输入之后要用getchar();来接受输入的回车键,这个地方卡了我很长时间。
2. 数字13按照正常的逻辑应该是“tam tret",但是样例中只给出了”tam“这一个字母,说明后面的0应该省略不写。这种细节要是我在考试中肯定不会发现。
3. 最后还是有两组数据没有通过。就差把别人的代码给粘贴上来了,但是就是找不到为什么出错。
Code:
#include<iostream> #include<string> using namespace std; string lowDigit[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; string highDigit[13] = {"###", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; void MarToEarth(string str) { int len = str.length(); int t1 = 0, t2 = 0; string s1 = str.substr(0, 3), s2; if (len > 4) s2 = str.substr(4, 3); for (int i = 1; i < 13; ++i) { if (lowDigit[i] == s1 || lowDigit[i] == s2) t2 = i; if (highDigit[i] == s1) t1 = i; } cout << t1*13 + t2 << endl; } void EarthToMar(string str) { int n = stoi(str); int low = n % 13; int high = n / 13; if (high) cout << highDigit[high]; if ((high) && (low)) cout << " "; if (low || n == 0) cout << lowDigit[low] << endl; } int main() { int n; cin >> n; getchar(); string num; for (int i = 0; i < n; ++i) { getline(cin, num); if (num[0] >= ‘0‘ && num[0] <= ‘9‘) EarthToMar(num); else MarToEarth(num); } return 0; }
标签:with space people art cpp help lse hat ica
原文地址:https://www.cnblogs.com/ruruozhenhao/p/12598978.html