题名:玛雅历
题意:历法转换 。
代码:
// 1008.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; class data { public: char day[200]; char mon[200]; char year[200]; }; int main(int argc, char* argv[]) { int num=0; cin>>num; char temp[256]={0}; data *s=new data[num]; for (int i=0;i<num;i++) { cin>>s[i].day>>s[i].mon>>s[i].year; } cout<<num<<endl; string *sday=new string[260]; int tmon=0,tday=0; int count=0; int o=0,p=0; string ma[20]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"}; while(1)//计算Tzolkin历表对应一年中的天数 { o++; p++; if(o>13) o=1; if(p>20) p=1; char temp[100]; sprintf(temp,"%d ",o); sday[count]=temp; sday[count]+=ma[p-1]; count++; if(count==260) break; } string HaabMonDic[19]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"}; for (int i=0;i<num;i++) { int day=atoi(s[i].day)+1; string month=s[i].mon; int imonth=0; string year=s[i].year; int iyear=atoi(year.c_str()); for (int j=0;j<19;j++) { if(month.compare(HaabMonDic[j])==0) { imonth=j; break; } } int allday=iyear*365+imonth*20+day; int tyear=allday/260; int tt=allday%260; if(tt==0)//如果是最后一天,需要转换 { tyear--; tt=260; } printf("%s %d ",sday[tt-1].c_str(),tyear); } delete []sday; delete []s; return 0; }
总结:想当然,忘记要转换的历法最后一天要特殊处理,第一种历法实际上是有19个月。马虎粗心大意,哎