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

8 篇文章 0 订阅
4 篇文章 0 订阅

这一题其实是和上一篇是一个系列的,由于我只找到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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值