Write a program that prints the Gregorian calendar for a given year. The year must be 1583 or later, and January 1, 1583, lands on a Saturday. Every subsequent year has January 1st begin one day of the week later (as (365 % 7) == 1) unless the previous year was a leap year, in which case, January 1st begins two days of the week later.
A year is a leap year if the year is:
Here is an example of how your program should work. January 1, 1970, lands on a Thursday, and the week is shown ending on a Sunday.
Enter a year (0 to quit): 1970
January
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
February
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
March
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
April
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
May
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
June
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
July
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
August
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
September
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
October
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
November
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
December
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26
28 29 30 31
The solar year is approximately 365.24219 days, and as a result of the progression of leap years, Gregorian calendar has 365.2425 days, yielding a relative error of 0.000084% per year.
As an aside, rather than excluding three leap years every 400 years, a more accurate calendar would see one leap year removed every 128 years. This would yield an average year of $365.25 - \frac{1}{128} = 365.2421875$ days, which is significantly closer to the actual solar year than the Gregorian calendar, having a relative error of less than 0.00000069%, a factor of approximately 122 better.
It is a curiosity that 128 is not only divisible by four but also a power of two.