藍橋杯~高斯日記

題目標題: 高斯日記

大數學家高斯有個好習慣:無論如何都要記日記。

他的日記有個與衆不同的地方,他從不註明年月日,而是用一個整數代替,比如: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章