#include<stdio.h>
static char daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int day_of_year(int year,int month,int day);
void month_day(int year,int yearday,int *pmonth,int *pday);
int main(void)
{
int day,mon,dat;
day=day_of_year(1981,10,2);
month_day(1981,81,&mon,&dat);
return 0;
}
/* day_of_year: set day of year from month and day */
int day_of_year(int year,int month,int day)
{
int i,leap;
leap=year%4==0 && year%100 !=0 || year %400 == 0;
if(month < 1 || month > 12)
return -1;
if(day < 1 || day > daytab[leap][month])
return -1;
for(i=1;i<month;i++)
day += daytab[leap][i];
return day;
}
/* month_day: set month,day from day of the year */
void month_day(int year,int yearday,int *pmonth,int *pday)
{
int i,leap;
if(year < 1)
{
*pmonth = -1;
*pday = -1;
return;
}
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for(i=1;i<=12 && yearday > daytab[leap][i];i++)
yearday -= daytab[leap][i];
if(i > 12 && yearday > daytab[leap][12])
{
*pmonth=-1;
*pday=-1;
}
else
{
*pmonth=i;
*pday=yearday;
}
}
I2luY2x1ZGU8c3RkaW8uaD4KCnN0YXRpYyBjaGFyIGRheXRhYlsyXVsxM109ewoJezAsMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzF9LAoJezAsMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzF9Cn07CgppbnQgZGF5X29mX3llYXIoaW50IHllYXIsaW50IG1vbnRoLGludCBkYXkpOwp2b2lkIG1vbnRoX2RheShpbnQgeWVhcixpbnQgeWVhcmRheSxpbnQgKnBtb250aCxpbnQgKnBkYXkpOwoKaW50IG1haW4odm9pZCkKewoJaW50IGRheSxtb24sZGF0OwoKCWRheT1kYXlfb2ZfeWVhcigxOTgxLDEwLDIpOwoJCglwcmludGYoIiVkXG4iLGRheSk7CgoJbW9udGhfZGF5KDE5ODEsODEsJm1vbiwmZGF0KTsKCglwcmludGYoIiVkLCVkIixtb24sZGF0KTsKCQoJcmV0dXJuIDA7Cn0KCi8qIGRheV9vZl95ZWFyOiBzZXQgZGF5IG9mIHllYXIgZnJvbSBtb250aCBhbmQgZGF5ICovCgppbnQgZGF5X29mX3llYXIoaW50IHllYXIsaW50IG1vbnRoLGludCBkYXkpCnsKCWludCBpLGxlYXA7CgkKCWxlYXA9eWVhciU0PT0wICYmIHllYXIlMTAwICE9MCB8fCB5ZWFyICU0MDAgPT0gMDsKCglpZihtb250aCA8IDEgfHwgbW9udGggPiAxMikKCQlyZXR1cm4gLTE7CglpZihkYXkgPCAxIHx8IGRheSA+IGRheXRhYltsZWFwXVttb250aF0pCgkJcmV0dXJuIC0xOwoKCWZvcihpPTE7aTxtb250aDtpKyspCgkJZGF5ICs9IGRheXRhYltsZWFwXVtpXTsKCglyZXR1cm4gZGF5Owp9CgovKiBtb250aF9kYXk6IHNldCBtb250aCxkYXkgZnJvbSBkYXkgb2YgdGhlIHllYXIgKi8KCnZvaWQgbW9udGhfZGF5KGludCB5ZWFyLGludCB5ZWFyZGF5LGludCAqcG1vbnRoLGludCAqcGRheSkKewoJaW50IGksbGVhcDsKCQoJaWYoeWVhciA8IDEpCgl7CgkJKnBtb250aCA9IC0xOwoJCSpwZGF5ID0gLTE7CgkJcmV0dXJuOwoJfQoKCWxlYXAgPSB5ZWFyICUgNCA9PSAwICYmIHllYXIgJSAxMDAgIT0gMCB8fCB5ZWFyICUgNDAwID09IDA7CgoJZm9yKGk9MTtpPD0xMiAmJiB5ZWFyZGF5ID4gZGF5dGFiW2xlYXBdW2ldO2krKykKCQl5ZWFyZGF5IC09IGRheXRhYltsZWFwXVtpXTsKCglpZihpID4gMTIgJiYgeWVhcmRheSA+IGRheXRhYltsZWFwXVsxMl0pCgl7CgkJKnBtb250aD0tMTsKCQkqcGRheT0tMTsKCX0KCWVsc2UKCXsKCQkqcG1vbnRoPWk7CgkJKnBkYXk9eWVhcmRheTsKCX0KfQoK