游客 Signup | Login
中文 | En

1503 - 日期差值

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

Input

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

Output

每组数据输出一行,即日期差值

Examples

Input

20130101
20130105

Output

5

Solution C

#include <stdio.h>
#include <math.h>

int m[][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};

int leap(int year)
{
  return((year%4==0&&year%100!=0)||(year%400==0));
}

int day(int year,int month,int day)
{
  int d=0;
  int k=0;
    int i;
	  if(leap(year))
    k=1;
  for(i=1;i<month;i++)
    d+=m[i][k];
  d+=day;
  return(d);
}
main()
{
  int y1,y2,m1,m2,d1,d2,day1,day2,i;
  while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF)
  {
	  scanf("%4d%2d%2d",&y2,&m2,&d2);
	  day1=day(y1,m1,d1);
	  day2=day(y2,m2,d2);
	  for(i=0;i<y1;i++)
	  {
		  if(leap(i))
			  day1+=366;
		  else
			  day1+=365;
	  }
	   for(i=0;i<y2;i++)
	  {
		  if(leap(i))
			  day2+=366;
		  else
			  day2+=365;
	  }
	   printf("%d\n",(int)fabs(day1-day2)+1);
  }
}

Solution C++

#include<stdio.h>
#include<math.h>

int m[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};

int leap(int y)
{
	return (y%4==0&&y%100!=0)||(y%400==0);
}

int day(int Y,int M,int D)
{
	int k=0,i,d;
	if(leap(Y))
		k=1;
	for(d=0,i=1;i<M;i++)
		d+=m[i][k];
	d+=D;
	return d;
}

int main()
{
	int Y1,M1,D1,Y2,M2,D2,i,d1,d2;
	while(scanf("%4d%2d%2d",&Y1,&M1,&D1)!=EOF)
	{
		scanf("%4d%2d%2d",&Y2,&M2,&D2);
		d1=day(Y1,M1,D1);
		d2=day(Y2,M2,D2);
		for(i=0;i<Y1;i++)
			if(leap(i))
				d1+=366;
			else
				d1+=365;
		for(i=0;i<Y2;i++)
			if(leap(i))
				d2+=366;
			else
				d2+=365;
		printf("%d\n",(int)fabs(d1-d2)+1);
	}
	return 0;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题