题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
------------------------------
注意:依据题意:可得如果日记上标注 1,则为1777-04-30.因为高斯这货把他出生算为一天!!!!!shit!
分析·:先逐年减去,再逐月减去,再逐日减去。但是题目只要求算出最终日期,所以不如直接采用逐日减去,慢一点,但保守一点,结果一样。
#include<iostream>
using namespace std;
int main(){
int leap[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 record = 5343;
int year = 1777;
int month = 4;
int day = 29;
// while(record > 365){
// year++;
// int temp = ((year%4==0&&year%100!=0)||(year%400==0));//is leap year?
// if(temp) record = record - 366;
// else record = record - 365;
// }
// while(record >=31){
// int temp = ((year%4==0&&year%100!=0)||(year%400==0));
// record = record - leap[temp][month];
// month++;
// if(month == 13){
// month = 1;
// year++;
// }
// }
while(record > 0){
int temp = ((year%4==0&&year%100!=0)||(year%400==0));
record--;
day++;
if(day > leap[temp][month]){
day = 1;
month++;
if(month == 13){
month = 1;
year++;
}
}
}
cout<<year<<endl;
cout<<month<<endl;
cout<<day<<endl;
return 0;
}
-----------------------------------------------------
Excel解法: