题目描述
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,a年b月c日放置,定时为n天,请你计算它爆炸的准确日期。输入格式
输入存在多组数据,每组数据输入一行,每一行输入四个正整数a,b,c,n
输入保证日期在1000-01-01到2020-01-01之间,且日期合法。
n不超过1000输入样例
2015 1 1 15 2014 11 9 1000
输出样例
2015-01-16 2017-08-05
#include <iostream>
using namespace std;
int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int check(int year){
if(year%400==0) return 1;
if(year%4==0&&year%100!=0) return 1;
return 0;
}
//distance是总剩余天数, restday是当年内还剩余的天数
int main(){
int year,month,day,distance;
while(scanf("%d %d %d %d",&year,&month,&day,&distance)!=EOF){
int restday=0;
restday+=months[month-1]-day;
if(check(year)&&month<=2&&day<29)
restday+=1;
for(int i=month;i<=11;i++){
restday+=months[i];
}
if(distance>restday){
while(distance>restday){
distance-=restday+1;
year++;
month=1;day=1;
if(check(year))
restday=365;
else
restday=364;
}
}
if(distance==restday){
//year+=1;
//month=1;day=1;
printf("%4d-%02d-%02d\n",year,12,31);
continue;
}
if(distance<restday){
restday=distance;
//printf("%d\n",restday);
for(int i=month-1;i<=11;i++){
if(check(year)&&i==1)
months[1]=29;
if(day+restday<months[i]){
day+=restday;
restday=0;
break;
}
else if(day+restday>months[i]){
month++;
restday-=months[i]-day+1;
day=1;
}else if(day+restday==months[i]){
restday=0;
day=months[i];
break;
}
months[1]=28;
}
printf("%4d-%02d-%02d\n",year,month,day);
}
}
}