藍橋杯 日曆問題 計算兩個日期的時間差

2021-06-29 14:19:36 字數 1271 閱讀 2584

人類歷史上出現了很多種曆法。現行的公曆即格里曆由儒略曆改革而來。它是目前較為精確和規則簡明的一種曆法,約2023年誤差一日。因為閏年問題以及每個月的長度不等,仍然使得某些計算較為麻煩。比如:求兩個日期間差多少天。

下面的**實現了求兩個由公曆表示的日期間差多少天的功能。

其計算原理是先求出每個日期距離1年1月1日的天數差值,再進一步做差即可。

請研讀**,填寫缺失的部分。

把填空的答案(僅填空處的答案,不包括題面)存入考生資料夾下對應題號的「解答.txt」中即可。

struct mydate

;int getabsdays(mydate x)

;int year = x.year-1;  // 因為欲求距離1年1月1日的距離

int days = year * 365 + year/4 - year/100 + year/400;

if(x.year%4==0 && x.year%100!=0 || x.year%400==0) month_day[1]++;

for(i=0; i<______________; i++)

days += month_day[i];

days += x.day-1;

return days;

}int getdiffdays(mydate a, mydate b)

int main(int argc, char* argv)

;mydate b = ;

int n = getdiffdays(a,b);

printf("%d\n", n);}

這還真是乙個比較好的演算法,要計算兩個日期的時間差,先計算每乙個日期到1年1月1日的時間,然後再計算這兩個天數的差值,這樣做思路特別清晰,因為不用考慮哪個年在前,哪個年在後的問題,在計算的時候,還有幾個我認為是亮點:

1.將每乙個月的天數存到乙個陣列當中,這樣做就不用使用n多的if了,不過其實有乙個優化的地方,就是12月份的天數其實不用存,因為計算的時候永遠也用不到這一天。

2.days = year * 365 + year/4 - year/100 + year/400;這句話用來計算n年距離1年的天數差,仍然寫的非常簡練,其中year/4 - year/100和year/400是閏年的天數

3.動態修改每個月的天數的陣列

看來可以考慮以後使用這種方法來計算了,我之前整理了一篇,那個還需要考慮正負之間的問題。

最後,那個空著的地方當然就是計算每個月的天數之和,不過,就像int year = x.year-1;這句話一樣,不要忘了是計算的差值,所以需要使用x.month-1才行。

計算兩個日期的天數問題

工程中,我們偶爾需要用到計算兩個日期之間的年 月 日數分別是多少。這時候有個簡單的方法而不是時間戳去轉化計算顯得格外重要。話不多說,上 1 獲取某一時間 預設為當前時間 若干年 月 日之後的時間nsdate 2 nsdate datewithfromdate nsdate nullable date...

計算兩個日期的時間間隔

計算兩個日期的時間間隔 第乙個日期和時間 第二個日期和時間 private string datediff datetime datetime1,datetime datetime2 說明 1.datetime 值型別代表了乙個從公元 0001年1 月1日0 點0分0 秒到公元 9999年12 月3...

計算兩個日期之間的天數

問題描述 給定兩個日期,計算相差的天數。比如2010 1 1和2010 1 3相差2天。時間限制 1000 記憶體限制 65536 輸入共兩行 第一行包含三個整數startyear,startmonth,startday,分別是起始年 月 日。第二行包含三個整數endyear,endmonth,en...