南邮 OJ 1596 日历

来源:互联网 发布:淘宝的导航条 编辑:程序博客网 时间:2024/06/01 23:02

日历

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 422            测试通过 : 80 

比赛描述

 在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000和2400是闰年。

给定从公元1900年1月1日开始逝去得天数,你的任务是给出这一天是哪年哪月哪日星期几。



输入

输入包含若干行,每行包含一个正整数,表示从1900年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。

输出

对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY.MM.DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个:“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday” and “Saturday”。

样例输入

40163
8000
17500
2371
-1

样例输出

2009.12.18 Friday
1921.11.27 Sunday
1947.12.1 Monday
1906.6.30 Saturday

提示

 

题目来源

NUPT





#include<iostream>char w[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};int monthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31};bool isLeapYear(int n){if(n%4 || !(n%100) && n%400){return 0;}return 1;}void printDate(int n){int year,month,day;year = 1900;n++;while(n>366){if(isLeapYear(year)){n -= 366;}else{n -= 365;}year++;}if(!isLeapYear(year) && n>365){n -= 365;year++;}if(isLeapYear(year)){monthDay[1] = 29;}else{monthDay[1] = 28;}for(month=0;month<12;month++){if(n>monthDay[month]){n -= monthDay[month];}else{day = n;break;}}printf("%d.%d.%d",year,month+1,day);}int main(){//freopen("test.txt","r",stdin);int n;while(scanf("%d",&n) && n!=-1){printDate(n);printf(" %s\n",w[(n+1)%7]);}}


0 0
原创粉丝点击