题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2315
im是一个掌控时间的大师。不同于一般人,他习惯使用秒来计算时间。如果你问他现在是几点,他会告诉你现在是今天的xxxx秒。Mik想要考考Kim。他想知道从某一天的00:00:00开始,经过s秒后是哪一天。但是Mik不会计算答案,他需要你的帮助。
注意:我们认为一天从00:00:00开始,到23:59:59结束。00:00:00经过1秒后是00:00:01;从00:00:00开始,加86400(606024)秒后就是下一天的00:00:00.
Input
第一行一个整数T表示数据组数。
接下来T行,每行一个日期yyyy-MM-dd,接下来一个整数s表示s秒。
Output
对于每个输入,输出一行yyyy-MM-dd 表示答案。对于不足两位的数要补齐前导0。
Sample Input
3
2016-12-10 1000
2016-02-28 86400
2016-01-01 1000000
Sample Output
2016-12-10
2016-02-29
2016-01-12
Hint
T<=100
s<=2147483647
日期在1800-01-01到2100-01-01之间
闰年的判断:
1.能被4整除且不能被100整除的为闰年.
2.能被400整除的是闰年.
**题意:**很简单;
解题思路;
直接按题意硬打代码;详细过程看代码;
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include<queue>
#include<stack>
#include <math.h>
#include <string.h>
#define ll long long
#define inf 0x3f3f3f3f3f
using namespace std;
const int N=500010;
int days[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};//存下十二个月;
int main()
{
int t,a,b,c,s,sum2,ss=29,ww;
int sum=0;
cin>>t;
while(t--)
{
scanf("%d-%d-%d %d",&a,&b,&c,&s);
sum=s/86400;//天数
// for(int i=0;i<12;i++)
//cout<<days[i]<<endl;
ww=c+sum;//记录
while(ww)//执行
{
if((a%4==0&&a%100!=0)||a%400==0)//特判闰年;
{
if(b==2)
ss=days[b]+1;//二月时月份变29天
else否则都正常
{
ss=days[b];
}
}
else//当然也有不是闰年的时候,直接不用特判考虑
{
ss=days[b];
}
//cout<<ss<<"**"<<ww<<endl;
if(ss<ww)//进人下一个月份
{
ww-=ss;//减去当前月天数
//cout<<ww<<endl;
if(ww>=0){//当前大于等于零时;因为刚刚减了当前月的天数;
b+=1;//就是月份加一
//cout<<"**"<<endl;
}
if(b>12)//当然判断一下月是否满年;
{
a+=1;
b=b-12;
}
}
else//如果不满足进入下一个月,则直接输出即可;
{
c=ww;
ww-=ww;
}
}
//cout<<a<<b<<c;
printf("%04d-%02d-%02d\n",a,b,c);//04d 不够4维自动补零;
}
return 0;
}