Problem:
日数

2 つの日付を入力とし、その 2 つの日付けの間の日数を出力するプログラムを作成してください。

日付 1 (y1, m1, d1) は日付 2 (y2, m2, d2) と同じか、あるいはそれ以前の日付とします。日付 1 は日数に含め、日付 2 は含めません。また、うるう年を考慮にいれて計算してください。うるう年の条件は次のとおりとします。

西暦年が 4 で割り切れる年であること。

ただし、100 で割り切れる年はうるう年としない。

しかし、400 で割り切れる年はうるう年である。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです：

y1 m1 d1 y2 m2 d2

y1, m1, d1, y2, m2, d2 のいずれかが負の数のとき入力の終わりとします。

データセットの数は 50 を超えません。

Output

データセットごとに、日数を１行に出力してください。

Sample Input

2006 9 2 2006 9 3
2006 9 2 2006 11 11
2004 1 1 2005 1 1
2000 1 1 2006 1 1
2000 1 1 2101 1 1
-1 -1 -1 -1 -1 -1

Output for the Sample Input

1
70
366
2192
36890

Solution in C (judge verdict: Accepted)


#include <stdio.h>
typedef struct _Date
{
	int year,month,day;

}Date;
int GetDay(const Date* d1, const Date* d2);
int main(void)
{
	Date d1, d2;
	while(1)
	{
		scanf("%d %d %d %d %d %d",
			&d1.year, &d1.month, &d1.day,
			&d2.year, &d2.month, &d2.day);
		if(d1.year<0 || d1.month<0 || d1.day<0 ||
			d2.year<0 || d2.month<0 || d2.day <0)
			break;
		printf("%d\n", GetDay(&d1, &d2));
	}
	return 0;
}


// Sub
int IsLeapYear(int y);
int GetMDay(int y, int m);
int GetDay(const Date* d1, const Date* d2)
{
	int dayCnt = 0;
	int y = d1->year,
		m = d1->month,
		d = d1->day;
	
	while(!(y==d2->year && m==d2->month && d==d2->day))
	{
		d++; dayCnt++;
		if(d>GetMDay(y,m)){m++; d=1;}
		if(m>12){y++; m=1;}
	}
	return dayCnt;
}
int IsLeapYear(int y)
{
	     if(y%400 == 0)return 1;
	else if(y%100 == 0)return 0;
	else if(y%4   == 0)return 1;
	return 0;
}
int GetMDay(int y, int m)
{
	const int mday[13]={0, 31,28,31,30,31,30,31,31,30,31,30,31};
	
	if(m==2 && IsLeapYear(y))
		return mday[2]+1;

	return mday[m];
}