Tuesday, May 29, 2018

UVA - 602 .cpp file

#include <iostream>
using namespace std;

const char* mn[] =
{
    "January", "February", "March", "April", "May", "June",
    "July", "August","September", "October", "November", "December"
};
const char* wn[] = {"Saturday", "Sunday", "Monday", "Tuesday",
                    "Wednesday", "Thursday", "Friday"
                   };
const int md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool ly(int ye)
{
    if (ye <= 1752)
        return !(ye % 4);
    else
    {
        if (!(ye % 400))
            return true;
        else if (!(ye % 100))
            return false;
        else
            return (!(ye % 4));
    }
}

bool vd(int ye, int mo, int da)
{
    if (ye == 1752 && mo == 9 && da >= 3 && da <= 13)
        return false;
    if (mo > 12)
        return false;
    int d = md[mo - 1];
    if (mo== 2 && ly(ye))
        d++;
    return (da <= d) ? true : false;
}

const char* dw(int ye, int mo, int da)
{
    bool gre= true;
    if (ye < 1752)
        gre = false;
    else if (ye == 1752)
    {
        if (mo < 9)
            gre = false;
        else if (mo== 9)
        {
            if (da < 14)
                gre = false;
        }
    }
    int q = da;
    if (mo< 3)
    {
        ye--;
        mo += 12;
    }
    int m = mo, k = ye % 100, j = ye / 100;
    int h = q + 13 * (m + 1) / 5 + k + k / 4;
    if (gre)
        h += j / 4 + 5 * j;
    else
        h += 5 + 6 * j;
    return wn[h % 7];
}

int main()
{
    while (true)
    {
        int mo, da, ye;
        cin >> mo >> da>> ye;
        if (!mo && !da && !ye)
            break;
        if (vd(ye, mo, da))
            cout << mn[mo- 1] << ' ' << da << ", " << ye << " is a " <<
                 dw(ye, mo, da) << endl;
        else
            cout << mo << '/' << da << '/' << ye << " is an invalid date.\n";
    }
    return 0;
}

No comments:

Post a Comment