蓝桥杯~高斯日记

题目标题: 高斯日记

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如: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

猜你喜欢

转载自blog.csdn.net/Ahaha_biancheng/article/details/81542783
今日推荐