题目描述:有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入:有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:每组数据输出一行,即日期差值
样例输入:
20130101
20130105
样例输出: 5
思路:令日期不断加一,知道第一个日期等于第二个日期为止。
把每月对应的日期按照平年闰年的区分用二维数组存储,这样方便每月天数的提取。
#include <cstdio>
bool isrunnian(int a)
{
return ((a%4==0)&&(a%100!=0))||(a%400==0);
}
int month[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}};
//0是平年 1是闰年对应每月的天数
int main()
{
int data1,data2,temp;
int yy1,mm1,dd1;
int yy2,mm2,dd2;
scanf("%d%d",&data1,&data2);
if(data1>data2)//保证y1永远小于y2;
{
temp=data2;
data2=data1;
data1=temp;
}
int num=1; //计数
yy1=data1/10000,mm1=data1/100%10,dd1=data1%10;
yy2=data2/10000,mm2=data2/100%10,dd2=data2%10;
while((yy1<yy2)||(mm1<mm2)||(dd1<dd2)) //出错点& ||
{
num++;
dd1++;
if(isrunnian(yy1)==1) //是闰年的话去[1]里的喽
{
if(dd1==(month[mm1][1]+1)) //dd1其实相当于一个标志
{
mm1++;
dd1=1;
}
if(mm1==13)
{
yy1++;
mm1=1;
dd1=1;
}
}
else
{
if(dd1==(month[mm1][0]+1))
{
mm1++;
dd1=1;
}
if(mm1==13)
{
yy1++;
mm1=1;
dd1=1;
}
}
}
printf("%d",num);
return 0;
}
平常生活就不太会算日期,趁着这次搞代码也算解决了人生一大难题。