/********************************************************************************************
leapyear.cpp
Jim Millard
for CO211/Fall 1999
Simple program that tells the user if a given year is or is not a leap year
********************************************************************************************/
#include <iostream>
#include <string>
using namespace std;
int main()
{
int year;
//inform and prompt the user
cout << endl << "This program will indicate if a year is or is not a leap year." << endl;
cout << endl << "Enter a year: ";
cin >> year;
cout << endl;
/*
now we do our comparisons and output the results.
the rules are:
1) if a year is before 1584, it cannot be a leap year, as leapyears were not used prior
to that year.
2) if a year is NOT divisible by 4, it cannot be a leap year
3) if the year IS divisible by 100 (therefore, it IS divisible by 4), but is NOT divisible
by 400, it cannot be a leap year
Note that the rules as written above make it easier to find a year that is NOT a leap
year, so that's the primary mode of logic we're using.
*/
if (1584 > year) //too early to be a leap year
cout << year << " is NOT a leap year. Leap years did not occur prior to 1584." << endl;
else if (0 != year%4) //not divisible by 4, so it's not a leap year.
cout << year << " is NOT a leap year." << endl;
else if ((0 == year%100) && (0 != year%400)) //divisible by 100, but not by 400
cout << year << " is NOT a leap year." << endl;
else
cout << year << " IS a leap year." << endl;
/*
although it's messier, the entire logic can be formulated as a single IF.
Unless you have a GOOD reason to do it, ORed statements should be done
through chained if-else-if statements instead:
if ((1584 > year) || (0 != year%4) || ((0 == year%100) && (0 != year%400)))
cout << year << " is NOT a leap year." << endl;
else
cout << year << " IS a leap year." << endl;
You can also reverse the logic to get the IS part first:
if ( (1584 <= year) && ( ((0 == year%4) && (0 != year%100)) || (0 == year%400) ) )
cout << year << " IS a leap year." << endl;
else
cout << year << " is NOT a leap year." << endl;
*/
return 0;
}