题目描述
例题1
高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
例题2
星系炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。
和高斯日记一样,只是这个是从后一天开始算的。
样例
输入
8113
输出
1980-03-21
2002-06-06
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int m[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
int run(int year){
if((year%4==0&&year%100!=0)||year%400==0){
return 1;
}
return 0;
}
int main(int argc, char** argv) {
int y,month,d;
int t=0;
int n;
cin>>n;
n--;//天数包括出生那一天//星际炸弹不包括,去掉这句话
scanf("%d-%d-%d",&y,&month,&d);
while(n--){
if(d==month[m][run(y)]){
month++;
d=1;
}else{
d++;
}
if(month>12){
y++;
month%=12;
d=1;
}
}
printf("%04d-%02d-%02d",y,month,d);
return 0;
}