POJ1008 日期轉換(5)

1 題意

2 分析

唯一需要注意的,是Haab日曆,每個月都是從0開始的,所以算sumday,在最後一個月除了+day_h,還要+1。

3

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

char Haab_month_name[20][10]={"","pop","no","zip", "zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
//int Haab_month_day[20]={0,20,20,20,20,19,19,19,19,19,19,19,19,19,19,19,19,19,19,4};
//int Tzolkin_name_num[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
char Tzolkin_name_zimu[20][10]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
int sumday,year_h,month_h,day_h;
int year_t,num_t,zimu_t;
int n;
void Cal_sumday(){
    sumday=0;
    for(int i=0;i<year_h;i++){
        sumday+=365;
    }
    for(int i=1;i<month_h;i++){
        sumday+=20;
    }
    sumday+=(day_h+1);//day 從0開始
}
void Print(){
    year_t=0;
    for(int i=0;sumday>260;i++){
        year_t=i+1;
        sumday-=260;
    }
    num_t=(sumday-1)%13+1;
    zimu_t=(sumday-1)%20;

    printf("%d %s %d\n",num_t,Tzolkin_name_zimu[zimu_t],year_t);
}
int main()
{
    char str_month[10];
    scanf("%d",&n);
    cout<<n<<endl;
    while(n--){
        scanf("%d.%s%d",&day_h,str_month,&year_h);
        for(int i=1;i<=19;i++){
            if(strcmp(Haab_month_name[i],str_month)==0){
                month_h=i;
                break;
            }
        }
        Cal_sumday();
        //cout<<"sumday: "<<sumday<<endl;
        Print();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章