您的位置:首页 > 其它

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

2014-12-22 00:06 363 查看
简单题目,先把时间都归到整年,然后再计算。同时为了防止减法出现xx月00日的情况,需要将d先多增加1,再恢复回来。

#include <cstdio>
#include <cstring>
#include <cstdlib>

int sy, sm, sd;
int ay, am, ad;

int map[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 n) {
if ( (n%4==0 && n%100!=0) || (n%400 == 0) )
return 366;
else
return 365;
}

void subDate(int d) {
int i, j, k;

sy = 2013;
d += 283;
while (d > isLeap(sy)) {
d -= isLeap(sy);
--sy;
}
i = isLeap(sy)==366 ? 1:0;
j = 12;
while (d > map[i][j]) {
d -= map[i][j];
--j;
}
sm = j;
sd = map[i][j] - d + 1;
}

void addDate(int d) {
int i, j, k;

ay = 2013;
d += 83;
while (d > isLeap(ay)) {
d -= isLeap(ay);
++ay;
}
i = isLeap(ay)==366 ? 1:0;
j = 1;
while (d > map[i][j]) {
d -= map[i][j];
++j;
}
am = j;
ad = d;
}

int main() {
int t, d;

#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
//freopen("data.in", "r", stdout);
#endif

scanf("%d", &t);
while (t--) {
scanf("%d", &d);
subDate(d);
addDate(d);
printf("%04d/%02d/%02d %04d/%02d/%02d\n", ay,am,ad, sy,sm,sd);
}

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