高斯日记
大数学家高斯有个好习惯,无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替。比如, 4210 后来人们知道那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许 也是个好习惯,它时时刻刻提醒着主人,日子又过去一天。还有多少时光可以用于浪费 呢况 高斯出生于 1777 年 4 月 30 日。 在高斯发现的一个重要定理的日记上标注着 5343。因此可算出那天是 1791 年 12 月 15 日。 高斯获得博士学位的那天日记上标着 8113 请你算出高斯获得博士学位的年月日。
提交答案的格式是 yyyy-mm-dd,
例如 1980-03-21
输出: 1799-7-16
#include"stdio.h"
int leapYear(int year){ //判断是否是闰年
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
else
return 0;
}
int main(void) {
int year=1791,month=12,day=15;
int t=0,i,n;//t 用于保存天数,i 是控制循环的角标,n 用于计算距离高斯发现重要定理那天
int d=day; //用于操作天数
int arr[]={31,28,31,30,31,30,31,31,30,31,30,31};//定义好一年中每个月的天数
n=8113-5343==2770; //距离高斯生出 2770 天
for(i=11;t<=2770;i++) //循环条件 t 小于等于 2770
{
if(i>=12) //角标对应 0——11,所以到 12 要从新为 0,年+1
{
i=0;
year++;
}
if(leapYear(year))
arr[1]=29;
else arr[1]=28;
d=2770-t;
t=t+arr[i];
month=i+1; //角标对应 0——11,加 1 就对应 1——12 了
}
printf("%d-%d-%d\n",year,month,d+day);//天数还要加上原先的 15 天
return 0;
}