|
- #include <stdio.h>
- #include <math.h>
- int Year1 ;
- int Month1 ;
- int Day1 ;
- int Year2 ;
- int Month2 ;
- int Day2 ;
- int MonthDays[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} ;
- char IsLeapYear(int Year)
- {
- if((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0)
- {
- return 1 ;
- }
- else
- {
- return 0 ;
- }
- }
- int GetMidMonthDays(int m1 , int m2, int y)
- {
- int i ;
- int ds ;
- ds = 0 ;
- for(i = m1 + 1 ; i < m2 ; i++)
- {
- ds += MonthDays[i-1] ;
- if(i == 2)
- {
- if(IsLeapYear(y))
- {
- ds++ ;
- }
- }
- }
- return ds ;
- }
- int GetSameYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
- {
- int Days ;
- //如果月份相同
- if(m1 == m2)
- {
- Days =abs(d2 - d1) ;
- }
- else
- {
- //計(jì)算第一個(gè)月份的天數(shù)
- Days = abs(MonthDays[m1 - 1] - d1) ;
- if(m1 == 2)
- {
- if(IsLeapYear(y1))
- {
- Days++ ;
- }
- }
- if((m1 + 1) != m2)
- {
- //計(jì)算中間月份的天數(shù)
- Days += GetMidMonthDays(m1 , m2, y1);
- }
- Days += d2 ;
- }
- return Days;
- }
- int GetMidYearDays(int y1,int y2)
- {
- int days=0;
- int i=0;
- for (i=y1+1;i<y2;i++)
- {
- if (IsLeapYear(i-1))
- {
- days+=366;
- }
- else
- days+=365;
- }
- return days;
- }
- int GetDifferentYearDays(int y1 , int m1 , int d1 , int y2 , int m2 , int d2)
- {
- int days;
- if (y1==y2)
- {
- days=GetSameYearDays( y1 ,m1 ,d1 , y2 , m2 ,d2);
- }
- else
- {
- days=MonthDays[m1+1]-d1;
- if((y1+1) != y2)
- {
- days+=GetMidYearDays(y1,y2);
- }
- days+=GetMidMonthDays(m1-1,13,y1);
- if(m2==1)
- {
- days+=d2;
- }
- else
- {
- days+=GetMidMonthDays(1,m2,y2);
- days+=d2;
- }
- }
- return days;
- }
- void main(void)
- {
- int Days ;
- for(; ;)
- {
- printf("請(qǐng)輸入第一個(gè)日期(年 月 日):\n");
- scanf("%d%d%d" , &Year1 , &Month1 , &Day1);
- printf("請(qǐng)輸入第二個(gè)日期(年 月 日):\n");
- scanf("%d%d%d" , &Year2 , &Month2 , &Day2);
- //假定第一個(gè)日期小于第二個(gè)日期
- Days = GetDifferentYearDays(Year1 , Month1 , Day1 , Year2 , Month2 , Day2);
- printf("兩個(gè)日期相差的天數(shù)為:%d\n" , Days);
- }
- }
復(fù)制代碼
|
|