Calendar

题目描述

日历是一个测量时间的系统,从几小时到几分钟到几个月和几天,最后是几年和几个世纪。小时,天,月,年和世纪的条款都是压光机系统的时间单位。 
根据公历,即今日使用的公历,可以被4整除的年份是闰年,但百年不能被400整除。因此,1700年,1800年,1900年和2100年是不是闰年,但1600,2000和2400是闰年。 
考虑到自2000年1月1日以来已经过去的天数,您的任务是查找星期几和星期几。

输入

输入由每行包含一个正整数的行组成,这是自2000年1月1日以来已经过去的天数AD最后一行包含一个不应被处理的整数-1。 
你可以假定结果日期不会在9999年之后。

输出

对于每个测试用例,以“YYYY-MM-DD DayOfWeek”格式输出包含日期和星期几的行,其中“DayOfWeek”必须是“星期日”,“星期一”,“星期二”, “星期三”,“星期四”,“星期五”和“星期六”。

样例输入

1730
1740
1750
1751
-1

样例输出

2004-09-26星期天
2004-10-06星期三
2004-10-16星期六
2004-10-17星期天#include <iostream>  
#include <cstring>  
#include <cstdio>  
#include <algorithm>  
using namespace std;  
char week[7][12] = {"Saturday" ,"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};  
int year_day(int year)  
{  
    if( (year % 4 == 0 && (year % 100) ) || year % 400 == 0)  
        return 366;  
    else  
        return 365;  
}  
int month_day(int year,int month)  
{  
   if( (year % 4 == 0 && (year % 100) ) || year % 400 == 0)  
   {  
        if(month == 2)  
           return 29;  
   }  
   else  
   {  
       if(month == 2)  
        return 28;  
   }  
   if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)  
    return 31;  
   else  
    return 30;  
}  
int main()  
{  
    int n;  
    while(cin>>n,n!=-1)  
    {  
        int year = 2000;  
        int month = 1;  
        int day = n % 7;  
  
        while(n>=year_day(year))  
        {  
            n=n-year_day(year);  
            year++;  
        }  
        while(n>=month_day(year,month))  
        {  
            n=n-month_day(year,month);  
            month++;  
        }  
        printf("%d-%02d-%02d %s\n",year,month,n + 1,week[day]);  
    }  
    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/qq_41486817/article/details/80707772
今日推荐