处理区间问题要预处理(计算星期几)

来源:互联网 发布:金融理财软件排名 编辑:程序博客网 时间:2024/06/06 03:33
#include<stdio.h>//日期差值#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0?1:0int dayOfmonth[13][2]={0,0,31,31,28,29,31,31,30,30,31,31,30,30,31,31,31,31,30,30,31,31,30,30,31,31};struct Date{int Day;int Month;int Year;void nextDay(){    Day++;    if(Day>dayOfmonth[Month][ISYEAP(Year)])    {        Day=1;        Month++;        if(Month>12)        {          Month=1;          Year++;        }    }}};int buf[50001][13][32];//save the orignal daysint Abs(int x){    return x<0?-x:x;}int main(){    Date temp;    int cnt=0;    temp.Day=1;    temp.Month=1;    temp.Year=0;    while(temp.Year!=5001)    {        buf[temp.Year][temp.Month][temp.Day]=cnt;        temp.nextDay();        cnt++;    }    int d1,m1,y1;    int d2,m2,y2;    while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF)    {        int days=buf[y1][m1][d1]-buf[2017][12][4];        days+=1;//At that time the days%7 will be1,2,3,4,5,6,7        printf("%d\n",(days%7+7)%7);    }}