#include <stdio.h>
#include <stdlib.h>
/*
输入两个日期(年 月 日 年 月 日),
输出这两个日期之间差多少天。
*/
int monthDays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int isGoodYear(int year);
int isGoodMonth(int month);
int isGoodDay(int year, int month, int day);
int isLeapYear(int year);
int dayOfYear(int year, int month, int day);
int daysBetweenYear(int year1, int year2);
int daysBetweenDays(int year1, int month1, int day1, int year2, int month2, int day2);
int main(){
int year1, month1, day1, year2, month2, day2;
while (fflush(stdin), scanf("%d%d%d%d%d%d",&year1,&month1,&day1,&year2,&month2,&day2)!=EOF){
printf("%d\n",daysBetweenDays(year1,month1,day1,year2,month2,day2));
}
system("pause");
return 0;
}
int daysBetweenDays(int year1, int month1, int day1, int year2, int month2, int day2){
//日期1<日期二为负数
//日期1>日期二为正数
int days1 = dayOfYear(year1, month1, day1);
int days2 = dayOfYear(year2, month2, day2);
int days3 = daysBetweenYear(year1, year2);
int totalDays = days2 + days3 - days1;
return totalDays;
}
int daysBetweenYear(int year1, int year2){
//year1 < year2为正数
//year1 > year2为负数
int maxYear = (year1 > year2) ? year1 : year2;
int minYear = (year1 > year2) ? year2 : year1;
int totalDays = 0;
for (int i = minYear; i < maxYear; ++i)
if (isLeapYear(i))
totalDays += 366;
else
totalDays += 365;
if (minYear == year1)
return totalDays;
else
return -totalDays;
}
int dayOfYear(int year, int month, int day){//当年第几天
int total = 0;
for (int i = 0; i < month - 1; ++i)
total += monthDays[i];
total += day;
if (isLeapYear(year) && (month > 2))
total++;
return total;
}
int isLeapYear(int year){
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
return 1;
else
return 0;
}
int isGoodYear(int year){
if (year >= 1900)
return 1;
else
return 0;
}
int isGoodMonth(int month){
if ((month >= 1) && (month <= 12))
return 1;
else
return 0;
}
int isGoodDay(int year, int month, int day){
switch (month)
{
case 2:
if (isLeapYear(year))
if ((day >= 1) && (day <= 29))
return 1;
else if ((day >= 1) && (day <= 28))
return 1;
else
return 0;
case 4:
case 6:
case 9:
case 11:
if ((day >= 1) && (day <= 30))
return 1;
else
return 0;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((day >= 1) && (day <= 31))
return 1;
else
return 0;
default:
printf("month error in day judge.\n");
return 0;
}
}
原文:http://www.cnblogs.com/mutaohengheng/p/5104952.html