练习记录08 间隔日期

题目描述

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;
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值