---------filename: doomsday.cpp ------------ #include #include int doomsday(int month, int day, int year); bool isLeapYear(int year); int dayOfWeek(int year); void main() { int day, month, year, day_of_week; cout << "Please enter the month: "; cin >> month; cout << "\nPlease enter the day: "; cin >> day; cout << "\nPlease enter the year: "; cin >> year; day_of_week = doomsday(month,day,year); cout << endl << month << "/" << day << "/" << year << " is a "; switch (day_of_week) { case 0: cout << "Monday."; break; case 1: cout << "Tuesday."; break; case 2: cout << "Wednesday."; break; case 3: cout << "Thursday."; break; case 4: cout << "Friday."; break; case 5: cout << "Saturday."; break; case 6: cout << "Sunday."; } getch(); } int doomsday(int month, int day, int year) { bool leapYear = isLeapYear(year); bool oddMonth = month%2; int doomsdayDayOfWeek = dayOfWeek(year); int doomsdayOfMonth; if(oddMonth) { if(1 == month) { if(leapYear) doomsdayOfMonth = 32; else doomsdayOfMonth = 31; } else if(5 == month) doomsdayOfMonth = 9; else if(7 == month) doomsdayOfMonth = 11; else if(9 == month) doomsdayOfMonth = 5; else doomsdayOfMonth = 7; } else { if(2 == month) { if(leapYear) doomsdayOfMonth = 29; else doomsdayOfMonth = 28; } else doomsdayOfMonth = month; } int daysFromDoomsday; int offsetFromDoomsdayDayOfWeek; if(day < doomsdayOfMonth) { daysFromDoomsday = doomsdayOfMonth - day; offsetFromDoomsdayDayOfWeek = daysFromDoomsday%7; if(offsetFromDoomsdayDayOfWeek > doomsdayDayOfWeek) return (doomsdayDayOfWeek - offsetFromDoomsdayDayOfWeek)+7; else return doomsdayDayOfWeek - offsetFromDoomsdayDayOfWeek; } else { daysFromDoomsday = day - doomsdayOfMonth; offsetFromDoomsdayDayOfWeek = daysFromDoomsday%7; return (doomsdayDayOfWeek + offsetFromDoomsdayDayOfWeek)%7; } } bool isLeapYear(int year) { if (0 == year%400) return true; else if(0 == year%100 && 0 == year%4) return false; else if (0 == year%4) return true; else return false; } int dayOfWeek(int year) { int day = 0; int yearCounter = 1898; if(year < 1898) { while(yearCounter!=year) { if(isLeapYear(yearCounter)) day += 2; else day++; yearCounter--; } return (7-(day%7)); } else { while(yearCounter!=year) { yearCounter++; if(isLeapYear(yearCounter)) day += 2; else day++; } return day%7; } }