//我把我的代碼貼給你,你自己看看吧,這種算天數的,多半都是閏年閏月弄錯了
//我這個先輸入的日期不必比後輸的小
#include
#include
#define YEAR 365
int delta_T( int year[], int month[], int day[] )
{
int i, t, k, s,
m[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
if( year[0] > year[1] )
{
t=year[0]; year[0]=year[1]; year[1]=t;
t=month[0]; month[0]=month[1]; month[1]=t;
t=day[0]; day[0] = day[1]; day[1]=t;
}
else
if( year[0]==year[1] && month[0]>month[1] )
{
t=year[0]; year[0]=year[1]; year[1]=t;
t=month[0]; month[0]=month[1]; month[1]=t;
t=day[0]; day[0] = day[1]; day[1]=t;
}
else
if( year[0]==year[1] && month[0]==month[1] )
return day[0]>day[1] ? day[0]-day[1] : day[1]-day[0]; //當年月都相同時,函數直接傳回天數差
if( year[0]%400==0 || ( year[0]%4==0 && year[0]%100!=0 ) )
if( year[1]%400==0 || ( year[1]%4==0 && year[1]%100!=0 ) )
t = 2; //year[0]與year[1]都是閏年
else
t = 3; //year[0]是閏年,而year[1]不是
else
if( year[1]%400==0 || ( year[1]%4==0 && year[1]%100!=0 ) )
t = 4; //year[0]不是閏年,而year[1]是
else
t = 0; //year[0]和year[1]都不是閏年
s = day[1];
if( year[0] == year[1] ) //當兩年份相同時,則直接求
{
if( t == 2 )
for( i=month[0]; i
s += m[1][i-1];
else
for( i=month[0]; i
s += m[0][i-1];
s -= day[0];
}
else
{
if( t==2 || t==3 )
for( i=month[0]; i<13; i++ )
s += m[1][i-1];
else
for( i=month[0]; i<13; i++ )
s += m[0][i-1];
s -= day[0];
k = 0; //year[1]距year[0]有幾年
for( i=year[0]+1; i
{
k++;
if( i%400==0 || ( i%4==0 && i%100!=0 ) ) //計算閏年
s++;
}
s += k*YEAR;
for( i=1; i
s += m[0][i-1];
if( month[1] == 2 && day[1] == 29 )
s += 1;
if( month[1] > 2 )
if( t==2 || t==4 )
s += 1;
}
return s;
}
int main()
{
int i, year[2], month[2], day[2], s;
for( i=0; i<2; i++ )
{
printf("\n請輸入如年月日(如:2011-1-1):");
scanf("%d-%d-%d", &year[i], &month[i], &day[i] );
}
s = delta_T( year, month, day );
printf("\n%d-%d-%d 與 %d-%d-%d 相隔%d天", year[0], month[0], day[0], year[1], month[1], day[1], s );
getch();
return 0;
}

沒有做不到