算两个日期相差多少天,杭电1201(18岁生日多少天)类似

来源:互联网 发布:linux 红底白字 编辑:程序博客网 时间:2024/04/29 23:48
#include<iostream>#include<cstdio>using namespace std;int days[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;    int Isyear()    {      if(year%100!=0&&year%4==0||year%400==0)return 1;      else return 0;    }    void nextday(){     int flag = Isyear();     day++;     if(day>days[month][flag])     {         day=1;         month++;         if(month>12)         {            month=1;            year++;         }     }    }};int buf[5000][13][32];//设定预处理天数int main(){    Date dat;    dat.day=1;    dat.month=1;    dat.year=0;//设定0.1.1为第一天    int count=0;//天数计算保存    while(dat.year!=5000){        buf[dat.year][dat.month][dat.day]=count;//与0.1.1的天数间隔        dat.nextday();        count++;    }int t;    int d1,m1,y1;int y2;    //int d2,m2,y2;//2次的日期    //cin>>y1>>m1>>d1;    //cin>>y2>>m2>>d2;    Date date;    while(scanf("%d",&t)!=EOF)    {for(int i = 1;i<=t;i++){          scanf("%4d-%2d-%2d",&y1,&m1,&d1);  date.year = y1;  y2 = y1+18;//18年后  if(date.Isyear()&&m1==2&&d1==29){//判断自己出生的时候是不是闰年里的2-29      printf("-1\n");  continue;  }  else{              cout<<buf[y2][m1][d1]-buf[y1][m1][d1]<<endl;//18年后的天数减去出生的天数       }//cin>>y1>>m1>>d1;       //cin>>y2>>m2>>d2;    }}  return 0;}

0 0