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;
}

浙公网安备 33010602011771号