题目描述
SOP II很开心,因为2021年的元旦节已过,幸福的寒假就马上来临。可是她突然想到一个问题,自己自出生的那一天起,到2021年1月1日,一共过了多少天呢?同时,她还想知道从公元后的某一个日期起,到2021年1月1日,一共过了多少天呢?请你帮她计算一下这些日期到2021年1月1日所经过的总天数(不超过109)。
说明:假设使用的都是格里高利历,即闰年的定义都是:能被4整除但不能被100整除或者能被400整除。
输入
多样例输入,总共有T个样例。样例数为正整数T(int型)由第一行输入,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
注意所有的生日都不会晚于2021-01-01。
输出
T行,每行一个数,表示从给定日期到2021年1月1日所经过的天数(含给定日期那天和2021年1月1日)。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int T = 0;//T为样例数
int y = 0, m = 0, d = 0;//y为年份,m为月份,d为日期
while (scanf("%d", &T) != EOF)
{
for (int t = 0; t < T; t++)
{
scanf("%d-%d-%d", &y, &m, &d);
int date = 0;
int count = 0;//记录有多少个闰年
for (int i = 2021; i >= y; i--)//记录有多少个闰年
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
count++;
}
date += (2021 - y) * 365 + count + 1;//先计算输入年份一月一号至2023/01/01的天数
int flag = 0;
for (int i = 1; i <= m; i++)
{
int a = 30;
switch (i)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
a = 31; break;
case 2:
{
if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
a = 29;//如果输入年份为闰年
else a = 28;
}
default:
break;
}
date -= a;//减去整个月的天数
flag = a;
}
date += flag - d +1;
printf("%d\n", date);
}
}
return 0;
}