我看到很多C(C++)語言寫的程序里面判斷閏年是用下面的語句:if((year%4==0 && year%100!=0) || year%400==0)成立,就是閏年。但是我覺得這個判斷與 year%4==0 是完全等價的,為什么還要這么寫呢?(我看過很多書上都是這么判斷的)我認為他們等價的理由:因為 year%400==0 等價于 year%4==0 && year%100==0,||(或)上前面的 year%4==0 && year%100!=0,形成(甲&&非乙)||(甲&&乙)的情況,這就等價于甲!請高手們指教!
熱心網友
閏年的規則偶不太懂 ~真是愧為中國人啊~不過你說的兩句不是等價的 按書上的說法 1700 1800 1900 都不是閏年 ,但2000是閏年 前幾個雖然能被4整除 ,但也能被100整除,year%100!=0 的值為假,且year%400==0的值 也為假,因此不是閏年,而2000年則year%400==0的值為真,因此是閏年. "year%400==0 等價于 year%4==0 && year%100==0"這一句你推錯了 ,它們并不等價.事實上我想不明白你是怎么推出來的,僅僅是因為4*100=400嗎? 你用500,600,700套進去不也是不等價嗎?
熱心網友
year%400==0 等價于 year%4==0,這一句有誤,應是year%400==0 蘊涵 year%4==0,就是說從前者可以推出后者,而不能從后者推出前者,比如:4 % 4 == 0,但 4 % 400 == 4
熱心網友
year%4==0
熱心網友
你的問題出在這里,你認為year%400==0 等價于 year%4==0 && year%100==0其實這是不成立的。如果年份是200呢?200能被4整除,能被100整除,但能被400么?所以,你的推論是錯誤的。正確的閏年判定方法是。如果一年能被4整除并且不能被100整除,或者能被400整除,那么這一年就是閏年。