#include <stdio.h>
int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; /*平年每月天数*/
int allDays[12]={31,59,90,120,151,181,212,243,273,304,334,365};/*平年天数和*/
int daysLeap[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; /*闰年每月天数*/
int allDaysLeap[12]={31,60,91,121,152,182,213,244,274,305,335,366};/*闰年天数和*/
int isLeapYear(int year)
{
if((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0))
return 1;
return 0;
}
int diffDay(int beginDay, int endDay)
{
return endDay - beginDay + 1;
}
int diffMonth(int beginMon,int endMon,int beginDay,int endDay,int isleap)
{
int difference;
if(isleap){
difference = allDaysLeap[endMon - 1] - (daysLeap[endMon - 1] - endDay)
- (allDaysLeap[beginMon - 1] - (daysLeap[beginMon - 1] - beginDay))
+ 1;
}else{
difference = allDays[endMon - 1] - (days[endMon - 1] - endDay)
- (allDays[beginMon - 1] - (days[beginMon - 1] - beginDay))
+ 1;
}
return difference;
}
int diffYear(int beginYear, int endYear, int beginMon,
int endMon, int beginDay, int endDay)
{
int difference = 0;
int isY1leap = isLeapYear(beginYear);
int isY2leap = isLeapYear(endYear);
/*开始日期当年剩下的天数*/
difference += diffMonth(beginMon,12,beginDay,31,isY1leap);
/*结束日期当年过去的天数*/
difference += diffMonth(1,endMon,1,endDay,isY2leap);
for(int i = beginYear + 1; i < endYear; i++)
{
if(isLeapYear(i))
difference += 366;
else
difference += 365;
}
return difference;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int beginDate;
int endDate;
int minusDay;
/*输入时间格式YYYYMMDD*/
while(scanf("%d%d", &beginDate, &endDate) != EOF)
{
/*从输入中提取年,月,日*/
int beginYear = beginDate / 10000;
int beginMonth = beginDate / 100 % 100;
int beginDay = beginDate % 100;
int endYear = endDate / 10000;
int endMonth = endDate / 100 % 100;
int endDay = endDate % 100;
/*可能有起始日期大于结束日期的情况*/
if(beginYear > endYear)
{
swap(&beginYear, &endYear);
swap(&beginMonth, &endMonth);
swap(&beginDay, &endDay);
}
if(beginYear == endYear && beginMonth == endMonth){/*同年同月*/
printf("%d\n", diffDay(beginDay, endDay));
}else if(beginYear == endYear){/*同年不同月*/
printf("%d\n", diffMonth(beginMonth, endMonth, beginDay,
endDay, isLeapYear(beginYear)));
}else{/*不同年*/
printf("%d\n", diffYear(beginYear, endYear, beginMonth, endMonth,
beginDay, endDay));
}
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交