闰年一点搞不懂的地方

来源:百度知道 编辑:UC知道 时间:2024/06/03 14:24:06
#include <iostream.h>
void main()
{
int year;
bool IsLeapYear;
cout<<"please enter year:";
cin>>year;
IsLeapYear=((year%4==0&&year%100!=0)||(year%400==0));
if(IsLeapYear)
cout<<"Is a Leap Year";
else cout<<"Is not a Leap Year";
}
IsLeapYear=((year%4==0&&year%100!=0)||(year%400==0));
其中year%100!=0是不是说闰年除以100取余不等0?
那么2000年为什么是闰年?
输入0也说是闰年?
是不是哪里错了?

1.
year%100!=0 是判断year求余100是否 不等 0
2000%100 没错是==0,但是它只是代表(year%4==0&&year%100!=0)的值为假,|| 后面的(year%400==0) 中2000%400==0是成立的,所以整个判断就为真。
2.
跟据这样的判断,输入0在(year%4==0&&year%100!=0)中是为假,而在year%400==0是为真的,所以整个式子也是为真的。

给你一段好用的代码,你可以比较一下:
1 #include <stdio.h>

2

3 int main ()

4 {

5 int year, rem4, rem100, rem400;

6 printf ("请输入一个年份如2004:\n");

7 scanf ("%d", &year);

8

9 rem4 = year % 4;

10 rem100 = year % 100;

11 rem400 = year % 400;

12

13 if ((rem4 == 0 && rem100 != 0) || rem400 == 0)

14 printf ("这是一个润年。\n");

15 else

16 printf ("这不是润年\n");

17 return 0;

18 }