倒计时
Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others)
Total Submissions: 9 Accepted Submissions: 2
Problem Description
今天是2021年5月14日,星期五,小周非常期待一个重要的时刻,倒计时牌上显示还有多少天,倒计时牌上最多只能显示3位数,请你编程帮小周计算一下重要时刻的日期和星期几。
Input
输入有多组数据,每组一行,每行只有一个整数(最多3位)。
Output
输出对应的年月日和星期几(用1~7)。
Sample Input
1
10
Sample Output
2021-05-15 6
2021-05-24 1
#include <stdio.h>
#define Y 2021
#define M 5
#define D 14
int isLeap(int year)
{
return (year%4!=0||(year%100==0&&year%400!=0)) ? 0 : 1;
}
int main()
{
int sum =0;
int a[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 week[7] = {1,2,3,4,5,6,7};
while(~scanf("%d",&sum))
{
int sumDay = 0;
int y=0,m=0,d=0;
sumDay += (Y-1)*365;
for(int i = 1;i<M;i++)
{
sumDay += a[0][i];
}
for(int i = 1;i<Y;i++)
{
sumDay += isLeap(i);
}
sumDay += (d + sum-1);
sum += 14;
m = 5;
y = 2021;
while(a[isLeap(y)][m]<sum)
{
sum -= a[isLeap(y)][m++];
if(m==13)
{
y++;
m = 1;
}
}
d = sum;
printf("%d-%02d-%02d %d\n",y,m,d,week[sumDay%7]);
}
}