题目:输入两天的信息,计算这两天之间相隔多少天。
#include "stdio.h"
#include "math.h"
typedef struct date {
int year;
int month;
int day;
} Date;
int getIntervalDays(Date date_1, Date date_2) {
int days1,days2;
if (date_1.year < date_2.year) {
days1 = getDays(date_1.year, date_1.month, date_1.day); /*计算date_1是一年中的第几天*/
/*计算date_2距date_1所处年份1月1日相差天数*/
days2 = getDays(date_2.year, date_2.month, date_2.day) + getYearsDays(date_2.year, date_1.year);
} else if (date_1.year > date_2.year){
days1 = getDays(date_2.year, date_2.month, date_2.day); /*计算date_2是一年中的第几天*/
/*计算date_1距date_2所处年份1月1日相差天数*/
days2 = getDays(date_1.year, date_1.month, date_1.day) + getYearsDays(date_1.year, date_2.year);
} else {
/*date_1和date_2处在同一年*/
days1 = getDays(date_2.year, date_2.month, date_2.day);
days2 = getDays(date_1.year, date_1.month, date_1.day);
}
return abs(days2 - days1);
}
int isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 !=0)||(year % 400 ==0)) {
return 1;
} else {
return 0;
}
}
int getDays(int year ,int month,int date)
{
int months[13]={0,31,0,31,30,31,30,31,31,30,31,30,31} ,i,days=0;
if(isLeapYear(year)) /*判断是否是闰年*/
months[2]=29;
else
months[2]=28;
if(month <=0 || month >12 || date>months[month])
{
printf("It is error\n");
return -1;
} /*参数的有效性判断*/
for(i=1;i<month;i++) { /*计算天数*/
days = days + months[i];
}
days = days + date;
return days;
}
int getYearsDays(int year_1, int year_2) {
int i, early, late;
int days = 0;
if (year_1 <= year_2) {
early = year_1;
late = year_2;
} else {
early = year_2;
late = year_1;
}
for (i=early; i<late; i++) {
if (isLeapYear(i)) {
days = days + 366;
} else {
days = days + 365;
}
}
return days;
}
void main() {
Date date1 = {2005,10,31};
Date date2 = {2005,11,6};
printf("The interval days are %d\n",getIntervalDays(date1,date2));
getchar();
}