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 JAVA (judge verdict: Accepted)

import java.util.Scanner;

//Day Count
public class Main{

	static class T implements Comparable<T>{
		static int[] day = {0,31,28,31,30,31,30,31,31,30,31,30,31};
		int y,m,d;
		public T(int y, int m, int d) {
			this.y = y;
			this.m = m;
			this.d = d;
		}
		public int compareTo(T o) {
			return y!=o.y?y-o.y:m!=o.m?m-o.m:d-o.d;
		}
		public T n(){
			if(m==12){
				if(d==day[m])return new T(y+1,1,1);
				else return new T(y,m,d+1);
			}
			if(m!=2){
				if(d==day[m])return new T(y,m+1,1);
				else return new T(y,m,d+1);
			}
			if(y%4==0&&(y%100!=0||y%400==0)){
				if(d==29)return new T(y,m+1,1);
				else return new T(y,m,d+1);
			}
			if(d==day[m])return new T(y,m+1,1);
			else return new T(y,m,d+1);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(true){
			T s = new T(sc.nextInt(),sc.nextInt(),sc.nextInt());
			T t = new T(sc.nextInt(),sc.nextInt(),sc.nextInt());
			if(s.y==-1)break;
			int c = 0;
			while(s.compareTo(t)<0){
				c++;
				s = s.n();
			}
			System.out.println(c);
		}
	}
}