📄 pku2846.cpp
字号:
#include <stdio.h>
int leapcnt[301];
int mcnt[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)
{
if (y % 4 == 0 && y % 100 != 0)
return 1;
if (y % 400 == 0)
return 1;
return 0;
}
void init()
{
int i;
leapcnt[0] = 0;
for (i = 0; i < 300; i++)
{
leapcnt[i + 1] = leapcnt[i] + isLeap(i + 1998);
}
}
int getTotal(int y, int m, int d)
{
int ans, i, leap, tmp;
leap = isLeap(y);
y -= 1998;
ans = y * 365 + leapcnt[y];
for (i = 0; i < m; i++)
ans += mcnt[leap][i];
ans += d;
return ans;
}
void Solve(int t)
{
int yeara,yearb,montha,monthb,daya,dayb,totala,totalb, dis;
scanf("%d/%d/%d %d/%d", &montha, &daya, &yeara, &monthb, &dayb);
yearb = yeara;
if (montha == 12 && monthb == 1)
yearb++;
if (montha == 1 && monthb == 12)
yearb--;
totala = getTotal(yeara, montha, daya);
totalb = getTotal(yearb, monthb, dayb);
dis = totala - totalb;
printf("%d ", t);
if (dis > 7 || dis < -7)
printf("OUT OF RANGE\n");
else if (dis == 0)
printf("SAME DAY\n");
else if (dis > 0)
printf("%d/%d/%d IS %d DAY%s PRIOR\n", monthb, dayb, yearb, dis, dis == 1 ? "" : "S");
else
printf("%d/%d/%d IS %d DAY%s AFTER\n", monthb, dayb, yearb, -dis, -dis == 1 ? "" : "S");
}
int main()
{
int T, t;
init();
scanf("%d", &T);
for (t = 1; t <= T; t++)
Solve(t);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -