hdu2133 What day is it

 

 
#include <stdio.h>

int isleap( int y ) 
{
    if ( y % 4 == 0 && y % 100 != 0 || y % 400 == 0 )
        return 1;
    else return 0;
}

int legal( int y, int m, int d ) 
{
    if ( y <= 0 || y >= 10000 || m <= 0 || m >= 13 || d <= 0 || d >= 32 )
        return 0;
    if ( ( m == 2 && ( isleap(y) == 0 ) && d >= 29 ) ||
         ( m == 2 && ( isleap(y) == 1 ) && d >= 30 ) )
        return 0;
    if ( (m == 4 || m == 6 || m == 9 || m == 11) && d == 31 )
        return 0;
    return 1;
}

int leap( int y ) 
{
    int res = 0;
    int i;

    for ( i = 4; i < y; i += 4 ) {
        if ( isleap(i) == 1 ) {
            res++;
        }
    }
    return res;
}


int work( int y, int m, int d ) 
{
    int res = d;
    int i;
    int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};


    for ( i = 1; i < m; ++i ) {
        res += month[i];
    }

    res += 365 * (y-1);
    res += leap(y);
    if ( isleap(y) != 0 && m > 2 ) res++;

    return res % 7;
}


int main()
{
    int y, m, d;
    int res;

    while ( ~scanf( "%d %d %d", &y, &m, &d ) ) {
        if ( legal(y, m, d) == 0 ) {
            puts( "illegal" );
            continue;
        }

        res = work(y, m, d);
        switch(res) {
        case 0: puts( "Sunday" ); break;
        case 1: puts( "Monday" ); break;
        case 2: puts( "Tuesday" ); break;
        case 3: puts( "Wednesday" ); break;
        case 4: puts( "Thursday" ); break;
        case 5: puts( "Friday" ); break;
        case 6: puts( "Saturday" ); break;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值