題目標題: 高斯日記
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與衆不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。
這或許也是個好習慣,它時時刻刻提醒着主人:
日子又過去一天,還有多少時光可以用於浪費呢?
高斯出生於:1777年4月30日。
在高斯發現的一個重要定理的日記上標註着:5343,
因此可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上標着:8113
請你算出高斯獲得博士學位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
請嚴格按照格式,通過瀏覽器提交答案。
注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。
注意點:判斷閏年,閏年2月 29 天
閏年判斷方法:1. 能被4整除,但不可以被100整除(普通閏年) 2.可以被400整除(世紀閏年)
同時,注意高斯出生在4月30,不要按照1月1號計算
其餘詳見註釋吧
話說,高斯這個寶寶也是很有意思了O(∩_∩)O哈哈~
#include<iostream>
#include<iomanip>
using namespace std;
//判斷閏年
int run( int year)
{
if( year%4 == 0 && year % 100 != 0)
return 1;
else if( year % 400 == 0)
return 1;
else
return 0;
}
//用於實現不同月份的天數
int month( int m,int year)
{
int d;
switch(m) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: {
d = 31;
break;
}
case 2:
{
if(run(year)) {
d = 29;
break;
}
else {
d = 28;
break;
}
}
case 4: case 6: case 9: case 11: {
d = 30;
}
}
return d;
}
int main(void)
{
int year = 1777;
int day = 8113+119; //因爲4月30日總共120天,而代碼是從一開始算的,所以要在原來的基礎上加上119
while( day > 364) {
if(run(year))
day -= 366;
else
day -= 365;
year++;
}
int m;
for( m=1; m<=12; m++) {
if(day > 31)
day -= month( m, year);
else
break;
}
//setw和setfill兩個函數均是爲了在個位數的月份前面加一個0,相當於C語言的 "%2d"
cout << year << "-" <<setw(2) << setfill('0') << m << "-" << day << endl;
}
答案:1799-07-16