#21649: 你各位答案差1的給我進來


610078 (協同意大利麵的最後希望)

School : 嘉義縣私立協同基督教高級中學
ID : 119723
IP address : [218.166.166.158]
Last Login :
2020-09-29 00:38:28
a263. 日期差幾天 -- 板橋高中練習題 | From: [49.216.101.240] | Post Date : 2020-07-01 16:13

計算兩個日期到0001年01月01日的距離然後再相加

問題出在年轉換為日的部分

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

雖然依照閏年平年的標準這樣寫沒錯

但是你要知道這樣直接算的話,算到的實際上是隔年的同一天

以2020/07/01為例

2020*365-505+20-5,但這個天數會是「2020整年過完的天數」,繼續計算月和日下去會算成2021年的7/1

所以其實算年份要用(y-1)

int year = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400;

月份和日一般就沒什麼問題

這邊是程式碼:

https://github.com/CalvinWan0101/ZeroJudge-Basic/tree/master/a263-%E6%97%A5%E6%9C%9F%E5%B7%AE%E5%B9%BE%E5%A4%A9

 
ZeroJudge Forum