输入起始日期,截止日期,查询天数

该博客主要介绍了如何计算两个日期之间的天数,关注闰年处理、相同年份与不同年份的计算,以及起始月份剩余天数和截止年份的总天数。同时指出了解决方案的不足,例如未处理错误输入的日期判定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:不需要什么思路,就是算天数,关键把握好几个小点。

  1. 闰年问题
  2. 相同年份处理,不同年份处理
  3. 起始年份当月剩余天数,截止年份所含天数
#include<stdio.h>

#define bool char
#define True 1
#define False 0
int cal(int year1,int month1, int day1,int year2, int month2, int day2);
int leapyear[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int normalyear[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int year1,month1,day1,year2,month2,day2;
	int result;
	printf("请输入起始年月日:");
	scanf("%d%d%d",&year1,&month1,&day1);
	printf("请输入截止年月日:");
	scanf("%d%d%d",&year2,&month2,&day2);
	result = cal(year1,month1,day1,year2,month2,day2);
	printf("%d",result);
	
}
bool is_LeapYear(int year)
{
	if(year%4==0 || (year%400==0 && year%100!=0))
		return True;
	else
		return False;
} 

int cal(int year1,int month1, int day1,int year2, int month2, int day2)
{
	int result=0,i;
	//不同年份
	if(year1 != year2)
	{
		//计算相差的整年天数
		for(i=year1+1; i<year2; i++)
		{
			if(is_LeapYear(i))
				result += 366;
			else
				result += 365;
		}

		//计算起始年份本年的剩余天数
		if(is_LeapYear(year1))
		{
			for(i=month1;i<12;i++)
			{
				result += leapyear[i];
			}
			result += (leapyear[month1-1]-day1);
		}
		else
		{
			for(i=month1;i<12;i++)
			{
				result += normalyear[i];
			}
			result += (normalyear[month1-1]);
		}

		//计算截止年份所包含的天数
		if(is_LeapYear(year2))
		{
			for(i=0; i<month2-1; i++)
			{
				result += leapyear[i];
			}
			result += day2;
		}
		else
		{
			for(i=0; i<month2-1; i++)
			{
				result += normalyear[i];
			}
			result += day2;
		}

	}
	//年份相同
	else
	{
		if(is_LeapYear(year1))
		{
			if(month1 == month2)
			{
				result = (day2 - day1);
			}
			else
			{
				for(i=month1;i<month2-1;i++)
					result += leapyear[i];
				result += day2;
				result += (leapyear[month1-1]-day1);
			}
		}
		else
		{
			if(month1 == month2)
			{
				result = (day2 - day1);
			}
			else
			{
				for(i=month1;i<month2-1;i++)
					result += normalyear[i];
				result += day2;
				result += (normalyear[month1-1]-day1);
			}

		}
	}
	return result;

}

注意:不完善之处挺多,如对于输入错误的日期没有判定等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值