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;

public class Main {

	static int y1,m1,d1,y2,m2,d2;
	static int[] years, month;
	static{
		years = new int[10000];
		for(int i = 0;i<10000;i++){
			if(i%400==0){
				years[i]=366;
			}
			else if(i%100==0){
				years[i]=365;
			}
			else if(i%4==0){
				years[i]=366;
			}
			else{
				years[i]=365;
			}
		}
		month=new int[13];
		for(int i = 1;i<=7;i++){
			if(i%2==0){
				if(i==2){
					month[i]=28;
				}
				else{
					month[i]=30;
				}
			}
			else{
				month[i]=31;
			}
		}
		for(int i= 8;i<13;i++){
			if(i%2==0){
				month[i]=31;
			}
			else{
				month[i]=30;
			}
		}
	}
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while(true){
			y1=cin.nextInt();
			m1=cin.nextInt();
			d1=cin.nextInt();
			y2=cin.nextInt();
			m2=cin.nextInt();
			d2=cin.nextInt();
			if(y1<0||m1<0||d1<0||y2<0||m2<0||d2<0){
				break;
			}
			if(y1>y2){
				swap();
			}
			else if(y1==y2){
				if(m1>m2){
					swap();
				}
				else if(m1==m2){
					if(d1>d2){
						swap();
					}
					else if(d1==d2){
						System.out.println(0);
						continue;
					}
				}
			}


			int ans=0;
			for(int i = y1+1;i<y2;i++){
				ans+= years[i];
			}
			if(y1!=y2){
				for(int i = m1+1;i<13;i++){
					if(i==2&&years[y1]==366){
						ans+=29;
					}
					else{
						ans+=month[i];
					}
				}
				for(int i = 1;i<m2;i++){
					if(i==2&&years[y2]==366){
						ans+=29;
					}
					else{
						ans+=month[i];
					}
				}
			}
			else if(y1==y2){
				for(int i = m1+1;i<m2;i++){
					if(i==2&&years[y2]==366){
						ans+=29;
					}
					else{
						ans+=month[i];
					}
				}
			}
			if(m1==m2&&y1==y2){
				ans+= d2-d1;
			}
			else{
				if(m1!=2){
					ans += month[m1]-d1;
				}
				else if(m1==2&&years[m1]==366){
					ans += 29-d1;
				}
				ans += d2;
			}
			System.out.println(ans);
		}
	}
	static void swap(){
		int tmp = y1;
		y1=y2;
		y2=tmp;

		tmp = m1;
		m1=m2;
		m2=tmp;

		tmp=d1;
		d1=d2;
		d2=tmp;
	}
}