給定日子,返回是一週的第幾天--【程式設計珠璣】
阿新 • • 發佈:2019-02-08
這一題其實是和上一篇是一個系列的,由於我只找到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