0125-Day Count

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0125&lang=jp
最初は同じ日付が指定された場合は1を返すのかと思ってた。
考え方
年・月・日が与えられたら0001/1/1からの経過日数を求める関数を作る。
すると、日付2の経過日数-日付1の経過日数が求める解となる。

実装(C++)

#include <cstdio>
//0001/1/1からの経過日数を求める
int getdaycount(int y,int m,int d){
	int res=0,u;
	u=(y%4==0)&&((y%100!=0)||(y%400==0));
	for(int i=1;i<y;i++){
		res+=365;if((i%4==0)&&((i%100!=0)||(i%400==0))) res+=1;
	}
	for(int i=1;i<m;i++){
		res+=31;
		if(i==4||i==6||i==9||i==11) res--;
		if(i==2){res-=3;if(u)res++;}
	}
	for(int i=1;i<d;i++){
		res+=1;
	}
	return res;
}

int main(){
	int y1,m1,d1,y2,m2,d2;
	while(1){
		scanf("%d%d%d%d%d%d",&y1,&m1,&d1,&y2,&m2,&d2);
		if(y1<0) return 0;
		printf("%d\n",getdaycount(y2,m2,d2)-getdaycount(y1,m1,d1));
	}
	return 0;
}