1. 程式人生 > >給定日子,返回是一週的第幾天--【程式設計珠璣】

給定日子,返回是一週的第幾天--【程式設計珠璣】

這一題其實是和上一篇是一個系列的,由於我只找到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即將消逝之際,祝各位順順利利...


歡迎各位指點...o(∩_∩)o