7-8 日期差

该程序用于计算给定日期与2022年3月19日之间的天数差异。程序考虑了闰年的规则,能处理1905年到2995年间的日期。输入一个八位数的日期,程序会判断该日期是在今天之前、之后还是相同,并输出相应的提示信息。
摘要由CSDN通过智能技术生成

pltdhll特别喜欢的日期是6月15日,因为这是一年中最中间的一天(pltdhll认为6是12的一半,15是30的一半,所以6月15日是一年最中间的一天)。

 同时他也有其他喜欢的日期,比如2022年3月19日也就是今天,因为这是成都信息工程大学第一届团体程序设计天梯赛校赛的举办时间。

 他突然想知道某个日期和今天相差的天数,但是手算太麻烦了,写代码的话他感觉代码量太多了,刚好今天遇见了正在看题干的你,想请你帮他完成这个程序。有些日期太久远了,所以你只需要保证你的程序在1905年初(1905年01月01日)到2995年底(2995年12月31日)的正确性即可。

 你的程序只要计算出pltdhll给你的日期与今天相差的天数,然后给出相应的提示语句即可。

 注意,今天是2022319日!

 注意,今天是2022319日!

 注意,今天是2022319日!

提示:闰年是公历中的名词,分为普通闰年和世纪闰年。公历年份是4的倍数的,且不是100的倍数,为普通闰年;公历年份是整百数的,必须是400的倍数才是世纪闰年。

输入格式:

在一行中给出一个八位数的日期,其格式为yyyymmddyyyy表示年,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 year;
int month;
int day;


int judge(void);//判断与今天的关系
int bigger(void);//日期>今天
int lower(void);//日期<今天
int leapyear[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };//闰年
int commonyear[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//平年




int main(void)
{
	int dete = 0;//差值
	int i;
	char str[9];

	fgets(str, 9, stdin);
	str[8] = '\0';

	//将输入的字符串转化为对应数字日期
	year = (str[0] - '0') * 1000 + (str[1] - '0') * 100 + (str[2] - '0') * 10 + (str[3] - '0') * 1;
  	month = (str[4] - '0') * 10 + (str[5] - '0') * 1;
	day = (str[6] - '0') * 10 + (str[7] - '0') * 1;


	dete = judge();

	
	//通过判断dete的值选择输出
	if (dete > 0)
	{
		printf("hai you %d tian", dete);
	}
	else if (dete < 0)
	{
		printf("guo qv %d tian", -dete);
	}
	else if (dete == 0)
	{
		printf("jiu shi jin tian!");
	}




	return 0;
}




//判断与 2022-3-19的大小关系,并通过bigger();和lower();对差值dete进行赋值
int judge(void)
{
	int dete = 0;

	if (year == 2022 && month == 3 && day == 19)
	{
		dete = 0;
	}
	else if (year > 2022)
	{
		dete = bigger();
	}
	else if (year < 2022)
	{
		dete = lower();
	}
	else if (year == 2022)
	{

		if (month > 3)
		{
			dete = bigger();
		}
		else if (month < 3)
		{
			dete = lower();
		}
		else if (month == 3)
		{
			if (day > 19)
			{
				dete = bigger();
			}
			else if (day < 19)
			{
				dete = lower();
			}
		}

	}

	return dete;
}




int bigger()
{
	int i;
	int dete = 0;

	//年份>2022
	if (year > 2022)
	{
		
		for (i = 2022; i < year; i++)
		{

			//2022-year-1年每年的天数
			if ((i % 400 == 0) || (i % 4 == 0 && i % 100 != 0))
			{
				dete += 366;
			}
			else
			{
				dete += 365;
			}
	}
		

		//year年时每月的天数
		if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
		{
			for (i = 1; i < month; i++)
			{
				dete += leapyear[i];
			}
		}
		else
		{
			for (i = 1; i < month; i++)
			{
				dete += commonyear[i];
			}
		}
		
		//加上第month月天数-78(1.1-3.19的总天数)
		dete += day;
		dete -= 78;
	}


	//年份 == 2022
	else if (year == 2022)
	{

		//1-month-1月的总天数
		for (i = 1; i < month; i++)
		{
			dete += commonyear[i];
		}

		//加上第month月天数-78(1.1-3.19的总天数)
		dete += day;
		dete -= 78;
	
	}
	

	//返回相差天数dete
	return dete;
}





//year<2022
int lower()
{
	int i;
	int dete = 0;

	//年份<2022
	if (year < 2022)
	{

		for (i = year; i < 2022; i++)
		{

			//year-2021年每年的天数
			if ((i % 400 == 0) || (i % 4 == 0 && i % 100 != 0))
			{
				dete += 366;
			}
			else
			{
				dete += 365;
			}
		}


		//year年时1-month-1每月的天数
		if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
		{
			for (i = 1; i < month; i++)
			{
					dete -= leapyear[i];
			}
		}
		else
		{
			for (i = 1; i < month; i++)
			{
				dete -= commonyear[i];
			}
		}

		//减去第year年month月的天数+78
		dete -= day;
		dete += 78;
	}


	//年份 == 2022
	else if (year == 2022)
	{

		//1-month-1月的总天数
		for (i = 1; i < month; i++)
		{

			dete -= commonyear[i];
		}

		//减去第month月天数+78
		dete -= day;
		dete += 78;
	}


	//返回相差天数dete
	return -dete;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值