这一题真是麻烦....
写完后突然想到用字符串数组来储存月份就可以了...= =!写了那么多...
写起来繁琐,要注意的地方也很多,贡献了好多次WA
就是历制转换,总天数是一样的,根据总天数作为两者转换的桥梁..中间注意一些细节,看代码吧..
#include <cstdio>
#include <cstring>
using namespace std;
int main(){
int hy,hm,hd;
char s_hd[10],s_hm[10];
int nCase;
scanf("%d",&nCase);
printf("%d\n",nCase);
while(nCase--){
scanf("%s",s_hd);
scanf("%s",s_hm);
scanf("%d",&hy);
s_hd[strlen(s_hd)-1]='\0';
sscanf(s_hd,"%d",&hd);
if(strcmp(s_hm,"pop")==0)hm=0;
else if(strcmp(s_hm,"no")==0)hm=1;
else if(strcmp(s_hm,"zip")==0)hm=2;
else if(strcmp(s_hm,"zotz")==0)hm=3;
else if(strcmp(s_hm,"tzec")==0)hm=4;
else if(strcmp(s_hm,"xul")==0)hm=5;
else if(strcmp(s_hm,"yoxkin")==0)hm=6;
else if(strcmp(s_hm,"mol")==0)hm=7;
else if(strcmp(s_hm,"chen")==0)hm=8;
else if(strcmp(s_hm,"yax")==0)hm=9;
else if(strcmp(s_hm,"zac")==0)hm=10;
else if(strcmp(s_hm,"ceh")==0)hm=11;
else if(strcmp(s_hm,"mac")==0)hm=12;
else if(strcmp(s_hm,"kankin")==0)hm=13;
else if(strcmp(s_hm,"muan")==0)hm=14;
else if(strcmp(s_hm,"pax")==0)hm=15;
else if(strcmp(s_hm,"koyab")==0)hm=16;
else if(strcmp(s_hm,"cumhu")==0)hm=17;
else if(strcmp(s_hm,"uayet")==0)hm=18;
int totald=hy*365+hm*20+hd+1;
int td,ty,tm;
char s_td[10];
ty=(totald-1)/260;
tm=totald%13;
if(tm==0)tm=13;//注意!!!
td=totald%20;
if(td==0)td=20;//注意!!!
switch(td){
case 1:strcpy(s_td,"imix");break;
case 2:strcpy(s_td,"ik");break;
case 3:strcpy(s_td,"akbal");break;
case 4:strcpy(s_td,"kan");break;
case 5:strcpy(s_td,"chicchan");break;
case 6:strcpy(s_td,"cimi");break;
case 7:strcpy(s_td,"manik");break;
case 8:strcpy(s_td,"lamat");break;
case 9:strcpy(s_td,"muluk");break;
case 10:strcpy(s_td,"ok");break;
case 11:strcpy(s_td,"chuen");break;
case 12:strcpy(s_td,"eb");break;
case 13:strcpy(s_td,"ben");break;
case 14:strcpy(s_td,"ix");break;
case 15:strcpy(s_td,"mem");break;
case 16:strcpy(s_td,"cib");break;
case 17:strcpy(s_td,"caban");break;
case 18:strcpy(s_td,"eznab");break;
case 19:strcpy(s_td,"canac");break;
case 20:strcpy(s_td,"ahau");break;
}
printf("%d %s %d\n",tm,s_td,ty);
}
return 0;
}