数日子
Time Limit: 1000MS Memory limit: 65536K
题目描述
按照公元纪年法,闰年被定义为能被 4 整除的年份,但是能被 100 整除而不能被 400 整除的年份除外,例如 1900 年就不是闰年。现在我们已知 2000 年 1 月 1 日为 星期六,你的任务是,对于给定的一个整数 n,写个程序计算并输出从 2000 年 1 月 1 日经过 n 天后的日期和该天是星期几。
输入
输入包含多组测试数据。
每组测试数据只包含一个正整数 n (0 <= n <= 99999)。
输出
对于每组测试数据,输出只有一行,为 n 天后的日期和该天为星期几,输出格式为 “YYYY-MM-DD week-day”(不包含引号) 具体格式见样例输出。
示例输入
100 400
示例输出
2000-04-10 Monday 2001-02-04 Sunday
1 #include<stdio.h> 2 #include<string.h> 3 char s[][20]={"Saturday","Sunday","Monday","Tuesday", "Wednesday", "Thursday","Friday"}; 4 5 int day_year(int year) 6 { 7 if(year%100==0) return year%400==0 ?366:365; 8 return year%4==0?366:365; 9 } 10 int day_month(int month,int year) 11 { 12 if(month==2) return day_year(year)==366?29:28; 13 int d; 14 switch(month) 15 {case 1:case 3:case 5:case 7:case 8:case 10:case 12: d=31;break; 16 default :d=30;} 17 return d; 18 } 19 int main () 20 { 21 int n,y,m,d,w; 22 23 while(scanf("%d",&n)!=EOF) 24 { 25 y=2000;m=1;d=1; 26 w=n%7; 27 while(n) 28 { 29 if(n>=day_year(y)) 30 {n=n-day_year(y);y++;} 31 else if(n>=day_month(m,y)) 32 {n=n-day_month(m,y);m++;} 33 else 34 {d=d+n;n=0;} 35 } 36 printf("%d-%02d-%02d %s\n",y,m,d,s[w]); 37 } 38 return 0; 39 } 40 41 42