Leap Year Checker.

Stan Brown, Oak Road Systems browns at iccgcc.decnet.ab.com
Wed Sep 26 03:04:06 AEST 1990


In article <24700010 at sunc1>, mccaugh at sunc1.cs.uiuc.edu writes:
> Ordinarily, a leap-year is a multiple of four, so that--given leap-year y--
> (y%4 == 0) ought to indicate if y designates a leap-year.

Bzzzzzt!  Nope, but thanks for playing.  Vanna has lovely gifts for you.

Every leap year is divisible by four, but not every year divisible by
four is a leap year.  Since the 18th century (I think 1752, but an
earlier century in R.C. countries), the algorithm has been:

IF it's divisible by 400 it's a leap year
ELSEIF it's divisible by 100 it's _not_ a leap year
ELSEIF it's divisible by 4 it's a leap year
ELSE it's not a leap year.

Out of every 400 years, 97 are leap and 303 are non-leap.  (1800, 1900,
2100, 2200, 23300, 2500, etc. are non-leap years.  In countries where
people listened to Pope Gregory, 1700 was also not a leap year.)  Since
divisibility by 4 is necessary (though not sufficient), it's normally
coded first:

    if ( y%4  ||  (y%100==0 && y%400) )      /* inner ( ) are redundant */
	printf("%d is not a leap year.\n", y);
or
    if ( y%4==0  &&  (y%100 || y%400==0) )   /* inner ( ) required */
        printf("%d is a leap year.\", y);

Gosh, you ask a simple question and you get a pageant!  Of course, if
your program deals only with years from 1901 to 2099 inclusive, then "y
is divisible by 4" and "y is a leap year" are equivalent statements.

Stan Brown, Oak Road Systems, Cleveland, Ohio, U.S.A.      (216) 371-0043
Disclaimer:   Your mileage may vary.  Close cover before striking.   Void
where taxed, regulated, licensed, or prohibited by law. I am not a crook.



More information about the Comp.lang.c mailing list