我看到很多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整除,那么这一年就是闰年。