PKU 2080 Calendar
http://poj.org/problem?id=2080
2000年1月1日からの日数が入力されるので、年月日に変換してついでに曜日も表示する。
面倒くさい日付計算をあまりしたくなかったので、最初localtimeとか使おうとしたのですが、REが出てうまくいかなかったり、2038年問題に直面して9999年とかが出なかったりしたので、以下の方針に転換。
intだとMLEだったので、shortにしたら通った。よかった。
char youbi[][10]={"Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday","Saturday"}; int mon[]={31,29,31,30,31,30,31,31,30,31,30,31}; short year[4000000],month[4000000],day[4000000]; main(){ int y=2000,m=1,d=1; rep(i,4000000){ year[i]=y; month[i]=m; day[i]=d; if(m==12 && d==31){ y++; m=1; d=1; if((y%4==0 && y%100!=0) || y%400==0)mon[1]=29; else mon[1]=28; continue; } if(d==mon[m-1]){ ++m; d=0; } ++d; } ll n; while(cin>>n,~n) printf("%d-%02d-%02d %s\n",year[n],month[n],day[n],youbi[(n+6)%7]); }