第一題
标題:高斯日記
題目描述:
大數學家高斯有個好習慣:無論如何都要記日記。他的日記有個與衆不同的地方,他從不注明年月日,而是用一個整數代替,比如:4210。後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒着主人:日子又過去一天,還有多少時光可以用于浪費呢?
高斯出生于:1777年4月30日。在高斯發現的一個重要定理的日記上标注着:5343,是以可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上标着:8113。請你算出高斯獲得博士學位的年月日。
輸入格式
在一行輸入一個整數n
輸出格式
輸出高斯出生n天後的日期 ,例如:1980-03-21
輸入樣例
輸出樣例
解析:
1.當月份是12 日期是32時年份進位再把月日歸1
2.大月在日期是32時月份進位再把日期歸1
3.小月是31時月份進位再把日期歸1
4.閏年2月在日期為30時月份進位再把日期歸1 ⑤平年2月在日期為29時月份進位再把日期歸1
#include <bits/stdc++.h>
using namespace std;
bool isLeapYear(int y)
{
return (y%4==0 && y%100!=0) || (y%400 == 0);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int y = 1777,m = 4,d = 30;
int n;
cin >> n;
while(--n)
{
d++;
if(m==12 && d==32) //過年啦~
{
y++;
m = 1;
d = 1;
continue;
}
if((m==1 || m==3 || m==5 || m==7 || m==8 || m==10) && d==32) //大月進入下一個月
{
m++;
d = 1;
continue;
}
if((m==4 || m==6 || m==9 || m==11) && d==31) //小月進入下一個月
{
m++;
d = 1;
continue;
}
if(m==2 && isLeapYear(y) && d==30) //閏年2月進入下一月
{
m++;
d = 1;
continue;
}
if(m==2 && !isLeapYear(y) && d==29) //平年2月進入下一月
{
m++;
d = 1;
continue;
}
}
cout << y << "-" << m << "-" << d << endl;
return 0;
}