日历
日历是用于表述时间的系统,从小时到分钟,从月到日,最后从年份到世纪。术语小时、 日、月、年、世纪都是日历系统表述时间的单位。 按照目前国内使用的阳历,闰年被定义为能被4整除的年份,但是能被100整除而不能被 400整除的年是例外,它们不是闰年。例如:1700、1800、1900和2100不是闰年,而1600、 2000和2400是闰年。给定公元2000年1月1日后的天数,你的任务是给出这一天是哪年哪月哪日星期几。
输入格式
输入包含若干行,每行包含一个正整数,表示2000年1月1日后的天数。输入最后一行是 -1,程序不必处理。可以假设输出的年份不会超过9999。
输出格式
对每个测试样例输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”,其中 “DayOfWeek” 必须是下列常量中的一个:“Sunday”,“Monday”, “Tuesday”,“Wednesday”,“Thursday”,“Friday” 或 “Saturday”。
输入样例
1629
1345
1001
1876
-1
输出样例
2004-06-17 Thursday
2003-09-07 Sunday
2002-09-28 Saturday
2005-02-19 Saturday
#include<stdio.h> int run(int year); void format(int month); int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main(){ int n; char s[7][12]={" Saturday"," Sunday"," Monday"," Tuesday"," Wednesday"," Thursday"," Friday"}; //scanf("%d",&n); while(n!=-1&&scanf("%d",&n)!=0){ int n1=-1,year=2000,month=1,date=0; while(n-n1>run(year)){ n1+=run(year); if(n-n1>0){ year++; } } if(run(year)==366){ a[2]=29; }else{ a[2]=28; } while(n-n1>a[month]){ n1+=a[month]; if(n-n1>0){ month++; } } while(n-n1>0){ date++; n1++; } printf("%d-",year); format(month); printf("-"); format(date); printf("%s",s[n%7]); } return 0; } int run(int year){ if(!(year%4)){ if(!(year%100)&&(year%400)){ return 365; }else{ return 366; } }else{ return 365; } } void format(int time){ if(time<10){ printf("0%d",time); }else{ printf("%d",time); } }
灵感参考链接:(5条消息) 日历:推算日期与星期_Hoolys-CSDN博客