现在的位置: 首页 > 综合 > 正文

给定日子,返回是一周的第几天–【编程珠玑】

2014年02月20日 ⁄ 综合 ⁄ 共 1608字 ⁄ 字号 评论关闭

这一题其实是和上一篇是一个系列的,由于我只找到1900年1月1日星期一,暂且先判断这以后的日期吧;(一周的第一天是星期天,即周日)

上一篇是用来得到两个日期的天数的,那这一道就窃取上一道的劳动成果了;

通过得到目的日期与1900-1-1相差日期,对7取余,判断即可:

    case 0:  //今天是星期一...
        printf("Today是一周的第2天\n");
        break;
    case 1:  //今天是星期二...以此类推
        printf("Today是一周的第3天\n");
        break;
    case 2:
        printf("Today是一周的第4天\n");
        break;
    case 3:
        printf("Today是一周的第5天\n");
        break;
    case 4:
        printf("Today是一周的第6天\n");
        break;
    case 5:
        printf("Today是一周的第7天\n");
        break;
    case 6:
        printf("Today是一周的第1天\n");
        break;
    default:
        break;

因为1900-1-1是星期一,所以起点也是星期一,一个星期的第二天;

下面贴出代码,之前英雄会做多了...所以main中的数据录入我也没做,感兴趣的自己定义变量,录入数据即可;

/**********
* 2013-12-31
* _Luffy
* http://blog.csdn.net/xjm199
***********/
#include <stdio.h>

int isleapyear(int year)  //是否是闰年
{
    return ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0);
}

int sum(int year, int month, int day)
{
    int mon[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int sum = (year - 1) * 365;  //自公元1年来的天数
    int i;

    sum += (year - 1) / 4 + 1;  //能被4整除的都加上
    sum -= (year - 1) / 100 + 1;  //其中被100整除的不是闰年
    sum += (year - 1) / 400 + 1;  //实际上能被400整除的即为闰年

    for(i = 0; i < month - 1; ++i)  //将本年的剩下日期加上
        sum += mon[i];

    if(isleapyear(year) == 1 && month > 2)  //本年是否闰2月
        ++sum;

    sum += day;  //本月的日子加上

    return sum;
}


int main()
{
    //一周的第一天是周日,1900年1月1日星期一
    int days = sum(2013, 12, 31) - sum(1900, 1, 1);  //自1900年1月1日后的天数
    days = days % 7;

    switch(days)
    {
    case 0:  //今天是星期一...
        printf("Today是一周的第2天\n");
        break;
    case 1:  //今天是星期二...以此类推
        printf("Today是一周的第3天\n");
        break;
    case 2:
        printf("Today是一周的第4天\n");
        break;
    case 3:
        printf("Today是一周的第5天\n");
        break;
    case 4:
        printf("Today是一周的第6天\n");
        break;
    case 5:
        printf("Today是一周的第7天\n");
        break;
    case 6:
        printf("Today是一周的第1天\n");
        break;
    default:
        break;
    }

    return 0;
}

 

Today是一周的第3天

Process returned 0 (0x0)   execution time : 0.166 s
Press any key to continue.

 

在2013即将消逝之际,祝各位顺顺利利...

 

小工程可见:http://download.csdn.net/detail/xjm199/6791447

欢迎各位指点...o(∩_∩)o

【上篇】
【下篇】

抱歉!评论已关闭.