【题目】
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
【思路】(答案1799-07-16)
①代码法:循环8112次(高斯出生那天算一天了)。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 bool isleapyear(int y){ 5 return (y%4==0&&y%100!=0)||(y%400==0); 6 } 7 8 int main(){ 9 int y=1777,m=4,d=30; 10 for(int i=0;i<8112;i++){ 11 d++; 12 if(m==12&&d==32){ 13 y++; 14 m=1; 15 d=1; 16 continue; 17 } 18 if((m==1||m==3||m==5||m==7||m==8||m==10)&&d==32){ 19 m++; 20 d=1; 21 continue; 22 } 23 if((m==4||m==6||m==9||m==11)&&d==31){ 24 m++; 25 d=1; 26 continue; 27 } 28 if(m==2&&isleapyear(y)&&d==30){ 29 m++; 30 d=1; 31 continue; 32 } 33 if(m==2&&!isleapyear(y)&&d==29){ 34 m++; 35 d=1; 36 continue; 37 } 38 } 39 cout<<y<<"-"<<m<<"-"<<d; 40 }
②Excel法:虽然Excel没法处理1970年之前的日期问题,我们可以对1777做处理。