1. 程式人生 > >藍橋杯--2013--高斯日記(模擬)

藍橋杯--2013--高斯日記(模擬)



1.高斯日記 

大數學家高斯有個好習慣:無論如何都要記日記。他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢?高斯出生於:1777年4月30日。在高斯發現的一個重要定理的日記上標註著:5343,因此可算出那天是:1791年12月15日。高斯獲得博士學位的那天日記上標著:8113請你算出高斯獲得博士學位的年月日。提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21請嚴格按照格式,通過瀏覽器提交答案。注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。

剛開始用visual stdio,自動排版,挺不錯的

//從出生年開始算起,這種題一般都要掐頭去尾,我直接把頭加上了,
//出生第一天也算是活了一天,所以加119就行,

#include<iostream>
using namespace std;
int month[13] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main()
{
	int n;
	while (cin >> n)
	{
		n += 119;
		int year = 1777;
		while (n >= 365)//算出n所在的年份
		{
			if ((year % 4 == 0 && year % 400 != 0)|| year % 400 == 0)
				n -= 366;
			else
				n -= 365;
			year++;
		}
		int mon;
		if ((year % 4 == 0 && year % 400 != 0) || year % 400 == 0)
			month[1]++;//如果是閏年2月天數加一
		for (mon = 0; mon <= 11; mon++)
		{
			if (n > month[mon])
				n -= month[mon];//因為可以有4.30,所以這裡是>不是>=
			else
				break;
		}
		cout << year << "-" << mon+1 << "-" << n << endl;
	}
	return 0;
}