高斯日记思路:天数减去四年(三个平年+一个闰年)的时间,年数加四年,直到天数小于四年的时间,再分情况讨论。注意1800年是平年。
代码部分:
#include<stdio.h>
int main()
{
int year=1777,month=4,day=30;
int n;
int i=0;
int m1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int m2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&n);
n--;
while(n>=1461)
{
n-=1461;
year+=4;
}
if(n>=1341)
{
year+=4;
while(n>m1[i])
{
n-=m1[i];
i++;
}
month=i;
day=n;
}
else if(n<=245)
{
i=5;
while(n>m1[i])
{
n-=m1[i];
i++;
}
month=i;
day=n;
}
else if(n>=975)
{
year=year+3;
while(n>m2[i])
{
n-=m2[i];
i++;
}
month=i;
day=n;
}
else
{
while(n>=365)
{
n-=365;
year++;
}
i=5;
while(n>m1[i])
{
n-=m1[i];
i++;
}
month=i;
day=n;
}
if(n>1461*5+365+365+245+31+28)
{
if(day==1)
{
if(year%4==0)
{
month--;
day=m2[month];
}
else
{
month--;
day=m1[month];
}
}
else
day--;
}
printf("%d-%d-%d",year,month,day);
return 0;
}