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

根据年月日,判断20XX年XX月XX日是 星期几

时间:2015-10-20 13:38:03      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

//  已知1999.12.31是周五
//  根据年月日,判断20XX年XX月XX日是 星期几

#include "stdio.h"

unsigned int Year;
unsigned int Month;
unsigned int Day;

//===============================================================================
//判断是否为闰年
//===============================================================================
// 公元纪年的年数可以被四整除且不能被100整除,即为闰年;  
// 被100整除也可被400整除的为闰年;
// 被100整除而不能被400整除为平年;
char Whether_LeapYear(unsigned int y)
{
    return ( y%4==0 && y%100!=0 ) || (y%400==0);
}

//----------------------------------
//          验证每月最大天数
//----------------------------------
unsigned int Max_Valid_Day(unsigned int MonthTemp)
{
    unsigned int MaxDay;
    
    switch(MonthTemp)
    {
        // 1.3.5.7.8.10.12月31天
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            MaxDay = 31;
            break;
        
        // 4.6.9.11月30天
        case 4:
        case 6:
        case 9:
        case 11:
            MaxDay = 30;    
            break;
        
        case 2:
            if(Whether_LeapYear(Year))
                MaxDay = 29;        // 闰年2月29天
            else
                MaxDay = 28;        // 平年2月28天
            break;                
    }
    
    return MaxDay;
}
//----------------------------------------
//求自2000.1.1开始的任何一天是星期几
//函数没有通过求出总天数,再求星期几
//因为求总天数可能会超过uint的范围
//----------------------------------------
unsigned int Get_WeekDay(unsigned int rYear,unsigned int rMonth,unsigned int rDay)
{
    unsigned int i;
    unsigned int d;
    unsigned int w=5;    //已知1999.12.31是周五
    
    //从2000.1.1开始推算出(当前年i-1)年12.31是星期几(w)
    for(i=2000; i<rYear; i++)
    {
        d = Whether_LeapYear(i)? 366:365;
        w = (w + d) % 7;
    }
    
    //计算出当前所设置的年月日时该年的第几天
    for(d=0,i=1; i<rMonth;    i++)
        d += Max_Valid_Day(i);
    d += rDay;
    
    //根据w与d计算出当前【年/月/日】是星期几
    //返回值是: 0    -    1    -   2    -    3    -    4    -    5    -    6
    //对应星期: 日        一       二        三         四        五        六

    return ((w + d) % 7);
}

void main(void)
{
    while(1)
    {
        printf("请输入年月日\n");
        scanf("%d%d%d",&Year,&Month,&Day);
        printf("%d年%d月%d日是周",Year,Month,Day);
        printf("%d \n",Get_WeekDay(Year,Month,Day));
        printf("---------------------------------------\n\n");
    }
}

 技术分享

根据年月日,判断20XX年XX月XX日是 星期几

标签:

原文地址:http://www.cnblogs.com/zhangfan2014/p/4894340.html

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