您的位置:首页 > 其它

hdu 4515 小Q系列故事——世界上最遥远的距离

2016-02-28 21:08 375 查看
题目链接: hdu 4515

注意点:时间回到以前时,此时要得到day,不能直接取前一个月份的天书,而是要先得到月份,因为月份可能会回到去年的12月。

#include<iostream>
#include<cstdio>
using namespace std;
int cy = 2013,cm = 3,cd = 24;
int da[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31},
};
int isLeap(int y)
{
int  ret = 0;
if(y%4==0&&y%100!=0||y%400==0) ret = 1;
return ret;
}
void preDate(int n)
{
int y = cy,m = cm,d = cd;
int f = isLeap(y);
while(n--)
{
d--;
if(d==0)
{
//d = da[f][--m]
m--;
if(m==0) y--,m=12,f = isLeap(y);
d = da[f][m]; //注意点
}
}
printf("%04d/%02d/%02d\n",y,m,d);
}
void laterDate(int n)
{
int y = cy,m = cm,d = cd;
int f = isLeap(y);
while(n--)
{
d++;
if(d>da[f][m])
{
m++;
if(m > 12) y++,m = 1,f = isLeap(y);
d = 1;
}
}
printf("%04d/%02d/%02d ",y,m,d);
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
laterDate(n);
preDate(n);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: