#include "library.h"
bool is_leap_year(int Y)
{ if (Y%4!=0) return false;
if (Y%100!=0) return true;
if (Y%400!=0) return false;
return true; }
int day_of_year(int Y, int M, int D)
{ int ans=0;
if (M>1) ans=ans+31;
if (M>2)
{ if (is_leap_year(Y))
ans=ans+29;
else
ans=ans+28; }
if (M>3) ans=ans+31;
if (M>4) ans=ans+30;
if (M>5) ans=ans+31;
if (M>6) ans=ans+30;
if (M>7) ans=ans+31;
if (M>8) ans=ans+31;
if (M>9) ans=ans+30;
if (M>10) ans=ans+31;
if (M>11) ans=ans+30;
return ans+D; }
int day_number(int Y, int M, int D)
{ int ans=day_of_year(Y, M, D);
ans=ans+Y*365;
ans=ans+(Y+3)/4;
ans=ans-(Y-1)/100;
ans=ans+(Y-1)/400;
return ans; }
int find_year(int day)
{ int min=0;
int max=day/300+1;
while (true)
{ int year = (min+max)/2;
int first_day = day_number(year, 1, 1);
int last_day = day_number(year, 12, 31);
if (day>=first_day && day<=last_day)
return year;
else if (day<first_day)
max=year-1;
else
min=year+1; } }
int find_month(int year, int dn)
{ int month=1;
while (month<12)
{ if (day_number(year, month+1, 1) > dn)
return month;
month=month+1; }
return 12; }
void test(int dn)
{ const int year = find_year(dn);
const int month = find_month(year, dn);
printf("day number %d is in year %d, month %d\n", dn, year, month); }
void main(void)
{ test(732598);
test(732597);
test(732596);
test(732313);
test(732312);
test(730486);
test(730485);
test(693962);
test(693961);
test(649149); }