Print calendar for a given year in C++

21 Jun, 2021
Prerequisite : Find day of the week for given dateProblem: To print the calendar of any given year. The program should be such that it can prints the calendar of any input year.Implementation:  
CPP
// A C++ Program to Implement a Calendar// of an year#include<bits/stdc++.h>using namespace std; /*A Function that returns the index of the day  of the date- day/month/year  For e.g-   Index     Day  0         Sunday  1         Monday  2         Tuesday  3         Wednesday  4         Thursday  5         Friday  6         Saturday*/int dayNumber(int day, int month, int year){     static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1,                       4, 6, 2, 4 };    year -= month < 3;    return ( year + year/4 - year/100 +             year/400 + t[month-1] + day) % 7;} /*  A Function that returns the name of the month  with a given month number   Month Number     Name  0                January  1                February  2                March  3                April  4                May  5                June  6                July  7                August  8                September  9                October  10               November  11               December */string getMonthName(int monthNumber){    string months[] = {"January", "February", "March",                       "April", "May", "June",                       "July", "August", "September",                       "October", "November", "December"                      };     return (months[monthNumber]);} /* A Function to return the number of days in   a month   Month Number     Name        Number of Days  0                January     31  1                February    28 (non-leap) / 29 (leap)  2                March       31  3                April       30  4                May         31  5                June        30  6                July        31  7                August      31  8                September   30  9                October     31  10               November    30  11               December    31 */int numberOfDays (int monthNumber, int year){    // January    if (monthNumber == 0)        return (31);     // February    if (monthNumber == 1)    {        // If the year is leap then February has        // 29 days        if (year % 400 == 0 ||                (year % 4 == 0 && year % 100 != 0))            return (29);        else            return (28);    }     // March    if (monthNumber == 2)        return (31);     // April    if (monthNumber == 3)        return (30);     // May    if (monthNumber == 4)        return (31);     // June    if (monthNumber == 5)        return (30);     // July    if (monthNumber == 6)        return (31);     // August    if (monthNumber == 7)        return (31);     // September    if (monthNumber == 8)        return (30);     // October    if (monthNumber == 9)        return (31);     // November    if (monthNumber == 10)        return (30);     // December    if (monthNumber == 11)        return (31);} // Function to print the calendar of the given yearvoid printCalendar(int year){    printf ("         Calendar - %d\n\n", year);    int days;     // Index of the day from 0 to 6    int current = dayNumber (1, 1, year);     // i --> Iterate through all the months    // j --> Iterate through all the days of the    //       month - i    for (int i = 0; i < 12; i++)    {        days = numberOfDays (i, year);         // Print the current month name        printf("\n  ------------%s-------------\n",               getMonthName (i).c_str());         // Print the columns        printf("  Sun  Mon  Tue  Wed  Thu  Fri  Sat\n");         // Print appropriate spaces        int k;        for (k = 0; k < current; k++)            printf("     ");         for (int j = 1; j <= days; j++)        {            printf("%5d", j);             if (++k > 6)            {                k = 0;                printf("\n");            }        }         if (k)            printf("\n");         current = k;    }     return;} // Driver Program to check above functionsint main(){    int year = 2016;    printCalendar(year);     return (0);}
Output:  
 Calendar - 2016


  ------------January-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
         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

  ------------March-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
    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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                   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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                             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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
         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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                                  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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
              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-------------
  Sun  Mon  Tue  Wed  Thu  Fri  Sat
                        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
Time Complexity– O(1) . The time taken doesn’t depends on the input year. It is same for any given year. Auxiliary Space – O(1)This article is contributed by Rachit Balweriar .If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
sagar0719kumar
CPP-Library
date-time-program
C Language
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.