题目大意:水题,将一种日期表达方式转化为另一种,累加总天数即可求,同时也要考虑好匹配某一月名称的方法,这里采用累加字符串的ASCII码,因为C++中switch无法case字符串,只能是case常量值。 #include <iostream> #include <fstream> #include <cstdio> using namespace std; int getMonth(char *month) { int num = 0; for (int i = 0; month[i]; ++i) num += month[i]; switch(num) { case 335:return 1; case 221:return 2; case 339:return 3; case 471:return 4; case 438:return 5; case 345:return 6; case 674:return 7; case 328:return 8; case 414:return 9; case 338:return 10; case 318:return 11; case 304:return 12; case 305:return 13; case 636:return 14; case 433:return 15; case 329:return 16; case 534:return 17; case 546:return 18; case 552:return 19; } } int getSum(int day, int month, int year) { int total = 0; for (int i = 0; i < year; ++i) total += 365; for (int i = 1; i < month; ++i) total += 20; return total+day; } int main() { //freopen("temp.txt", "r", stdin); int n, day, year; char month[10], dot; char Tzolkin[20][10] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"}; cin >> n; cout << n << endl; while (n--) { cin >> day >> dot >> month >> year; int sum = getSum(day, getMonth(month), year); int tyear = sum / 260; int tname = sum%20 + 1; int tid = sum%13 + 1; cout << tid << ' ' << Tzolkin[tname-1] << ' ' << tyear << endl; } return 0; }