题目地址:http://www.codeup.cn/problem.php?cid=100000578&pid=0
题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
20130101
20130105
样例输出:
5
#include<cstdio>
using namespace std;
int month[15][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代表闰年
bool IsLeap(int year) //判断闰年函数
{
if (year%4==0&&year%100!=0||(year%400==0)) return true;
else return false;
}
int main()
{
int data1,data2;
int y1,m1,d1;
int y2,m2,d2;
while((scanf("%d%d",&data1,&data2))!=EOF)
{
if(data1>data2)
{
int temp;
temp=data1;
data1=data2;
data2=temp;
}
int day=1;
y1=data1/10000;m1=data1%10000/100;d1=data1%100; //处理输入数据,分离出年月日
y2=data2/10000;m2=data2%10000/100;d2=data2%100;
while(y1<y2||m1<m2||d1<d2)
{
day++;
d1++;
if(d1>month[m1][IsLeap(y1)]) //d1大于该月的天数,就将月份+1,d1置为1
{
m1++;
d1=1;
}
if(m1>12) //月份大于12就将年份加1,月份置1
{
y1++;
m1=1;
}
}
printf("%d\n",day);
}
return 0;
}