Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

# Calendar Calculation In C++

· ·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views
```// Coded for USACO's "friday" algorithm puzzle. Allows the user to brute-force calculate any date
// using the modern-day Gregorian calendar.

```
#include

#include

#include

using namespace std;

bool isLeapYear(int year) {
bool retval = false;
if (year % 100 == 0) {
if (year % 400 == 0) {
retval = true;
}
} else if (year % 4 == 0) {
retval = true;
}
return retval;
}

int daysInMonth(int month, int year) {
switch (++month) {
case 4:
case 6:
case 9:
case 11:
return 30;
break;
case 2:
if (isLeapYear(year)) {
return 29;
} else return 28;
break;
default:
return 31;
break;
}
}

int getFirstDayOfMonth(int month, int year, int day) {
int retval = -1;
int numdays;
if (month == 0) {
numdays = daysInMonth(11, year-1);
} else {
numdays = daysInMonth(month-1, year);
}
int offset = numdays % 7;
if (month == 0 && year == 1900) {
retval = 1;
} else {
retval = (day + offset) % 7;
}

return retval;
}

int getThirteenth(int firstday) {
return ((13 - firstday) % 7);
}

int main() {
ofstream fout ("friday.out");
ifstream fin ("friday.in");

int numYears;
fin >> numYears;
int year = 1900;
int firstDay[numYears][12];
int numThirteenths[7];
int day;

for (int z = 0; z < 7; ++z) numThirteenths[z] = 0;

for (int x = 0; x < numYears; ++x) {
for (int month = 0; month < 12; month++) {
if (year == 1900 && month == 0) {
firstDay[x][month] = 1;

} else if (month == 0) {
firstDay[x][month] = getFirstDayOfMonth(month, year, firstDay[x-1][11]);
} else {
firstDay[x][month] = getFirstDayOfMonth(month, year, firstDay[x][month-1]);
}
++numThirteenths[((firstDay[x][month] + 5) % 7)];
}
++year;
}

fout << numThirteenths[6] << " ";
for (int y = 0; y < 5; ++y) fout << numThirteenths[y] << " ";
fout << numThirteenths[5] << endl;

return 0;
}

``````
Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.