7-4 日期差

pltdhll特别喜欢的日期是6月15日,因为这是一年中最中间的一天(pltdhll认为6是12的一半,15是30的一半,所以6月15日是一年最中间的一天)。
 同时他也有其他喜欢的日期,比如2022年3月19日也就是今天,因为这是成都信息工程大学第一届团体程序设计天梯赛校赛的举办时间。
 他突然想知道某个日期和今天相差的天数,但是手算太麻烦了,写代码的话他感觉代码量太多了,刚好今天遇见了正在看题干的你,想请你帮他完成这个程序。有些日期太久远了,所以你只需要保证你的程序在1905年初(1905年01月01日)到2995年底(2995年12月31日)的正确性即可。
 你的程序只要计算出pltdhll给你的日期与今天相差的天数,然后给出相应的提示语句即可。
 注意,今天是2022年3月19日!
 注意,今天是2022年3月19日!
 注意,今天是2022年3月19日!
提示:闰年是公历中的名词,分为普通闰年和世纪闰年。公历年份是4的倍数的,且不是100的倍数,为普通闰年;公历年份是整百数的,必须是400的倍数才是世纪闰年。
输入格式:
在一行中给出一个八位数的日期,其格式为yyyymmdd,yyyy表示年,mm表示月,dd表示天。
题目保证所给日期在1905年初(1905年01月01日)到2995年底(2995年12月31日)之间。
输出格式:
根据下面提示以及相差的天数打印出相应的内容。
 若所给日期在今天之前,则输出guo qv xx tian,其中xx表示相差天数。
 若所给日期在今天之后,则输出hai you xx tian,其中xx表示相差天数。
 若所给日期就是今天,则输出jiu shi jin tian!
输入样例1:
20220319
输出样例1:
jiu shi jin tian!
输入样例2:
20220615
输出样例2:
hai you 88 tian
输入样例3:
20210615
输出样例3:
guo qv 277 tian

#include<stdio.h>
int main()
{
	//把1905年到2995年每一年的总天数放在year[i][0]
	//把每一年的每一个月都存起来闰年则++
	int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int year[3000][13]={0};
	for (int i = 1905; i <= 2995; i++)
	{
		for (int j = 1; j <= 12; j++)year[i][j] = month[j];
		if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { year[i][0] = 366; year[i][2]++; }
		else year[i][0] = 365;
	}
	int y, m, d;
	//输入技巧
	scanf("%4d%2d%2d", &y, &m, &d);
	int day = 0;
	//注意 i<y i<m 是没有等于的
	for (int i = 1905; i < y; i++)day += year[i][0];//年份跨度
	for (int i = 1; i < m; i++)day += year[y][i];//月份跨度
	day += d;//加上当前天数
	//42812是直接把当今日期输入进来输出day得知的
	//让当前日期和目标日期都以1905年1月1日为基准求总天数然后比较
	if (day == 42812)printf("jiu shi jin tian!");
	else if (day > 42812)printf("hai you %d tian", day - 42812);
	else if (day < 42812)printf("guo qv %d tian", 42812 - day);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值