比赛描述
给定从公元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]); } }