思路:
C代码如下:
/*
Used to count how many days from day A to day B.
Notice: A
*/
#include
int totalYear(int year);
int parthYear(int year, int mounth, int day);
int main(void)
{
int yy, mm, dd;
int total = 0;
int date_A, date_B;
int year_A, mounth_A, day_A;
int year_B, mounth_B, day_B;
printf("Enter day A such as yyyymmdd.\n");
scanf("%d", &date_A);
printf("Enter day B such as yyyymmdd.\n");
scanf("%d", &date_B);
if( date_A < date_B )
{
//分割年月日
year_A = date_A / 10000;
mounth_A = ( date_A / 100 ) % 100;
day_A = date_A % 100;
year_B = date_B / 10000;
mounth_B = ( date_B / 100 ) % 100;
day_B = date_B % 100;
for( yy = year_A; yy < year_B+1; yy++ )
{
//不跨年的计算方法
if ( yy == year_B)
{
total += parthYear(year_B, mounth_B, day_B) - parthYear(year_A, mounth_A, day_A);
continue;
}
//跨年的计算方法
//起始年的天数
if( yy == year_A )
{
total = total + totalYear(year_A) - parthYear(year_A, mounth_A, day_A);
continue;
}
//结束年的天数
if( yy == year_B )
{
total = total + parthYear(year_B, mounth_B, day_B);
continue;
}
//其余整年的天数
total = total + totalYear(yy);
}//END for(yy)
printf("\n%d-%d:total %d days\n", date_A, date_B, total);
}
else
printf("Illegal input.\n");
return 0;
}
// 计算整年的天数
int totalYear(int year)
{
int days = 0;
int febDays = 0;
if ((year%4==0&&year%100!=0)||year%400==0)
{
febDays = 29;
}
else
{
febDays = 28;
}
days = (31+febDays+31+30+31+30+31+31+30+31+30+31);
return days;
}
//计算该年从1月1号到指定日期的天数
int parthYear(int year, int mounth, int day)
{
int days = 0;
int febDays = 0;
if ((year%4==0&&year%100!=0)||year%400==0)
{
febDays = 29;
}
else
{
febDays = 28;
}
switch (mounth)
{
case 1:
days = day;
break;
case 2:
days = 31+day;
break;
case 3:
days = 31+febDays+day;
break;
case 4:
days = 31+febDays+31+day;
break;
case 5:
days = 31+febDays+31+30+day;
break;
case 6:
days = 31+febDays+31+30+31+day;
break;
case 7:
days = 31+febDays+31+30+31+30+day;
break;
case 8:
days = 31+febDays+31+30+31+30+31+day;
break;
case 9:
days = 31+febDays+31+30+31+30+31+31+day;
break;
case 10:
days = 31+febDays+31+30+31+30+31+31+30+day;
break;
case 11:
days = 31+febDays+31+30+31+30+31+31+30+31+day;
break;
case 12:
days = 31+febDays+31+30+31+30+31+31+30+31+30+day;
break;
default : break;
}
return days;
}