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; }