码迷,mamicode.com
首页 > 其他好文 > 详细

日起计算2

时间:2016-04-21 23:41:14      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:

//hdu 2133 what day is it
//题意:给一个日期计算是周几
//再次我采用从该日期到1年1月1日有多天,这时候y年以前比较好算,即(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400,(x/4-x/100+x/400),这样是直接计算出日期,
要是你选择跑循环计算也行,还有就是记住一些常识1年1月1日 是周一, 2000年1月1日 是周六, 0年1月1日是周六

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<algorithm>
using namespace std;

#define N 100;

int tab[2][13]= {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

char s[7][20]={{"Monday"}, {"Tuesday"},{"Wednesday"}, {"Thursday"},
 {"Friday"}, {"Saturday"}, {"Sunday"}};

int IsLeap(int n)
{
    return ((n%4==0&&n%100!=0) || n%400==0);
}


int main()
{
    int y, m, d, leap, t;

    while(scanf("%d%d%d", &y, &m, &d)!=EOF)
    {
        leap=IsLeap(y);
        if(m*d==0 || d>tab[leap][m])
        {
            printf("illegal\n");
            continue ;
        }
        t=0;
        t+=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400;
        for(int i=1; i<m; i++)
            t+=tab[leap][i];
        t+=d;
        t%=7;
        if(t==0)
            t=7;
        printf("%s\n", s[t-1]);
    }
    return 0;
}

 

日起计算2

标签:

原文地址:http://www.cnblogs.com/9968jie/p/5419344.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!