Test Message

a263: 日期差幾天

內容

給你兩個日期,問這兩個日期相差幾天。


輸入

輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。輸入以 EOF 作為結束,題目保證不會有不符合的測資出現。

2011 10 19
2011 10 18

輸出

輸出兩個日期差幾天。

1


解題思路

把日期轉換成自西元 0 年 0 月 0 日至該日的總天數再相減即可,要注意閏年在處理時有分兩部分 :

  1. 到去年為止共經過幾個閏年
  2. 今年有閏年嗎 ? 是否經過

完整程式碼

AC (5ms, 100KB)
#include <stdio.h>
#define ABS(x) (x) < 0 ? -(x) : (x)

typedef struct node
{
int Year, Month, Day;
}Date;

Date f, t;

int month[] = { 0 , 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
int fDays, tDays , gap;

inline int Days(Date src)
{
return src.Year * 365 + (src.Year - 1) / 4 - (src.Year - 1) / 100 + (src.Year - 1) / 400 + month[src.Month - 1] + src.Day
+ ((!(src.Year % 4) && (src.Year % 100) || !(src.Year % 400)) && src.Month > 2);
}

int main()
{
while (scanf(" %d %d %d %d %d %d", &f.Year, &f.Month, &f.Day, &t.Year, &t.Month, &t.Day) == 6)
{
gap = Days(f) - Days(t);
printf("%d\n", ABS(gap));
}
return 0;
}