数日子

数日子

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   
原文地址:https://www.cnblogs.com/LK1994/p/2977553.html