天天看點

python 求閏年_【Python】判斷閏年的邏輯?

下面的算法:

function isLeapYear(year) {

return !(year & 3 || year & 15 && !(year % 25));

}

是以,這個邏輯是怎麼樣的?

這事我看一段老代碼看到的,實在不了解其中的思路,請指教。

回答

能被4整除但不能被100整除,或能被400整除的年份即為閏年

這是普通寫法:

(year % 4 == 0 && year % 100 != 0) || year % 400 ==0

而year & 3和year % 4一緻, year & 15與year % 16一緻

如果年份不均勻地除以4,或者如果它不均勻分布,則不是16,但是除以25均勻。這意味着25的每個倍數不是閏年,除非它也是16的倍數。由于16和25沒有任何公共因子,是以滿足兩個條件的唯一時間是當年是16 * 25或400年的倍數

// https://en.wikipedia.org/wiki/Leap_year#Algorithm

253 bool leapyear(int y)

254 {

255 if (y % 4 != 0)

256 return false;

257 else if (y % 100 != 0)

258 return true;

259 else if (y % 400 != 0)

260 return false;

261 return true;

262 }