Coding Change World

代码改变世界
PKU1008

题名:玛雅历

题意:历法转换 。

代码:

// 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\n",sday[tt-1].c_str(),tyear);
    }
    delete []sday;
    delete []s;
    return 0;


}

总结:想当然,忘记要转换的历法最后一天要特殊处理,第一种历法实际上是有19个月。马虎粗心大意,哎

posted on 2013-12-20 09:54  alphaxz  阅读(205)  评论(0编辑  收藏  举报