题目链接:http://poj.org/problem?id=1008
题目分析:
通过输入的Haab历日期,转化成Tzolkin历日期。
我将Haab历中的月份和holly年分别存入了二维数组中。在输入数据Haab历中的月份可以使用strcmp()函数来与二维数组值进行比较,转化。
要注意年月日的起始日期,有的是以0开始的。
源代码:
/*玛雅历*/
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n; //转化的天数
int y1 = 0, m = 0, d1 = 0; //Habb历中的年,月,日
char dot; //输入的时候的.
int a = 0, b = 0, y2 = 0, d2 = 0; //Tzolkin历中的天数字,天名称,年数, 天数
char c1[20][10] =
{
"null", "pop", "no", "zip", "zotz", "tzec",
"xul", "yoxkin", "mol", "chen", "yax",
"zac", "ceh", "mac", "kankin", "muan",
"pax", "koyab", "cumhu", "uayet"
};
char c2[21][10] =
{
"null", "imix", "ik", "akbal", "kan",
"chicchan","cimi", "manik", "lamat", "muluk",
"ok","chuen", "eb", "ben", "ix",
"mem", "cib", "caban", "eznab", "canac",
"ahau"
};
char month1[1][10];
string day2;
int i;
cin>>i;
cout<<i<<endl;
while (cin>>d1>>dot>>month1[0]>>y1)
{
for (int k = 1;k <= 19; k++)
{
if (strcmp(month1[0], c1[k]) == 0)
{
m = k;
break;
}
}
if (m <= 19)
{
n = 365 * y1 + 20 * (m - 1) + d1;
y2 = n / 260; //年数
d2 = n % 260; //天数
a = d2 % 13 + 1;
b = d2 % 20 + 1;
day2 = c2[b];
cout<<a<<" "<<day2<<" "<<y2<<endl;
}
else
{
break;
}
}
system("pause");
return 0;
}