版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
#define _CRT_SECURE_NO_WARNINGS #include#include#include//定义一个结构体的日期 typedef struct {	//年	int Year;	//月	int Month;	//日	int Day; } DateTime; //日期对比结果 typedef enum {	//小于对方	Min = -1,	//等于	Equal = 0,	//大于	Max = 1 }DateTimeResult; //判断是否是一个大的日期,返回1为大 DateTimeResult IsMaxDateTime(DateTime dt1,DateTime dt2) {	DateTimeResult temp = IsMaxNumber(dt1.Year,dt2.Year);	if(temp != Equal)	{	return temp;	}	else	{	temp = IsMaxNumber(dt1.Month,dt2.Month);	if(temp != Equal)	{	return temp;	}	else	{	return IsMaxNumber(dt1.Day,dt2.Day);	}	} } //判断两个数字大小 DateTimeResult IsMaxNumber(int a,int b) {	int temp = a - b;	if(temp != 0)	{	if(temp > 0)	{	return Max;	}	else	{	return Min;	}	}	return Equal; } //判断是否是瑞年,瑞年返回1 int IsRui(DateTime dt) {	if(dt.Year % 400 == 0 || (dt.Year % 100 !=0 && dt.Year % 4 == 0))	{	return 1;	}	return 0; } //数据交换,大的在前,相等不管 DateTimeResult SwapDataTime(DateTime *dt1,DateTime *dt2) {	DateTime temp;	DateTimeResult result=IsMaxDateTime(*dt1,*dt2);	if(result!=Equal)	{	if(result==Min)	{	temp=*dt1;	*dt1=*dt2;	*dt2=temp;	}	}	return result; } //获取当月一共有多少天 int getMonthDayCount(DateTime dt) {	int Months[] ={31,28,31,30,31,30,31,31,30,31,30,31};	if(dt.Month == 2)	{	if(IsRui(dt))	{	return 29;	}	}	return Months[dt.Month-1]; } //天的话,要根据月份和年份来判断上限是多少天,一次加一天 //返回值为进位 int AddDay(DateTime *dt) {	int carry = 0;	int NowMonthDay =getMonthDayCount(*dt);	if((*dt).Day == NowMonthDay)	{	(*dt).Day = 1;	//开始加月	carry = 1;	}	else	{	(*dt).Day += 1;	}	return carry; } //增加月份 int AddMonth(DateTime *dt) {	int carry = 0;	if((*dt).Month == 12)	{	(*dt).Month=1;	carry=1;	}	else	{	(*dt).Month+=1;	}	return carry; } //增加年 int AddYear(DateTime *dt) {	(*dt).Year+=1; } //输入两个年份,判断两个年份之间相差多少天 void main(void) {	//准备采用递增的思想实现	//肯定有一个大的时间和一个小的时间	//小的时间按照日月年,逐步往上涨,逼近指定的位置	//可能需要用到一个递归	DateTime dt1,dt2,temp;	DateTimeResult result;	int Days=0,carry=0;	dt1.Year=1991;	dt1.Month=2;	dt1.Day=15;	dt2.Year=2019;	dt2.Month=1;	dt2.Day=29;	//把dt1变成大的日期	result= SwapDataTime(&dt1,&dt2);	temp = dt2;//temp保存一下备份,里面为最小的日期	if(result!=Equal)	{	//开始进行业务处理	while ((result=SwapDataTime(&dt1,&dt2)) != Equal)	{	//下面实现了日期的递增	carry=AddDay(&dt2);	if(carry)	{	carry= AddMonth(&dt2);	if(carry)	{	AddYear(&dt2);	}	}	Days++;	}	}	printf("大的日期是:%d年%d月%d日 小的年是:%d年%d月%d日 它们相差:%d天! \r\n"	,dt1.Year,dt1.Month,dt1.Day,temp.Year,temp.Month,temp.Day,Days);	system("pause"); }