codeup1928

算法笔记练习——日期差值

题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的,则规定它们之间的天数为两天

输入格式

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出格式

每组数据输出一行,即日期差值

#include<stdio.h>
//日期差值

int months[13][2]={
	//平年和闰年每个月的天数
	{0,0},
	{31,31},
	{29,28},
	{31,31},
	{30,30},
	{31,31},
	{30,30},
	{31,31},
	{31,31},
	{30,30},
	{31,31},
	{30,30},
	{31,31}
};

//判断是否为闰年
int isRunNian(int year){
	int flag=0;
	if((year%4==0 && year%100!=0) || (year%400==0)){
 		flag=1;
	}
	return flag;
} 

//天数加1
int addDay(int date){
	int day = date%100;
	int month = (date/100)%100;
	int year = (date/10000);
	int col = isRunNian(year);//判断是否为闰年 
	int maxday = months[month][col];//当前月份天数
	if(day==maxday){
		if(month==12){
			year++;
			month=1;
			day=1;
		}else{
			month++;
			day=1;
		}
	}else{
		day++;
	}
	//printf("year:%d month:%d day:%d ", year, month, day);
	int newdate = year*10000+month*100+day;
	return newdate;
}

//判断日期是否符合常理
int rightDate(int date){
	int flag=0;
	int day = date%100;
	int month = (date/100)%100;
	int year = (date/10000);
	if(day>=1 && day<=31){
		flag=1;
	}
	if(month>=1 && month <=12){
		flag=1;
	}
	if(year>0){
		flag=1;
	}
	return flag;
} 

//比较两个日期的大小
int compare(int date1, int date2){
	int day1 = date1%100, day2 = date2%100;
	int month1 = (date1/100)%100, month2 = (date2/100)%100;
	int year1 = (date1/10000), year2 = (date2/10000);
	if(year1>year2){
		return 1;
	} else if(year1<year2){
		return -1;
	}else{
		if(month1>month2){
			return 1;
		}else if(month1<month2){
			return -1;
		}else{
			if(day1>day2){
				return 1;
			}else if(day1<day2){
				return -1;
			}else{
				return 0;//date1==date2 
			}
		}
	}
}

//求两个日期差值
void distance(int date1, int date2){
	int lowdate, highdate;
	int flag=compare(date1, date2);
	int count=1;
	if(flag==1){
		lowdate=date2;
		highdate=date1;
	}else{
		lowdate=date1;
		highdate=date2;
	}

	while(lowdate<highdate){
		lowdate = addDay(lowdate);
		count++;
	}
	printf("the distance between date1:%d and date2:%d is %d", date1, date2, count);
} 

int main(){
	int date1, date2;
	printf("input date1 and date2.\n");
	scanf("%d%d", &date1, &date2);
	distance(date1, date2);
	return 0;
} 
posted @ 2021-02-03 10:47  平平无奇的打工人  阅读(41)  评论(0)    收藏  举报